핵심 요약
Microsoft Developer의 글은 MSI 설치 기반 바로가기를 식별하고 정보를 얻는 방법과 역동작 원리를 설명합니다.
구현 방법
- IShellLink::GetPath 및 IShellLink::Resolve의 동작이 설치 여부를 판단하고, 일부 바로가기가 실행 파일 경로 대신 설치를 요구하는 MSI 온-디맨드 동작으로 작동하는 원리를 설명
- SLDF_HAS_DARWIN_ID 플래그로 MSI 바로가기를 식별하는 방법
- MSI 도구인 MsiGetShortcutTarget를 사용해 MSI 제품 코드, 기능 ID, 구성요소 코드를 획득하는 절차
- MsiGetComponentPath를 통해 설치 시 구성요소 경로를 얻는 방법
- EXP_DARWIN_ID_SIG 데이터 블록을 CopyDataBlock로 얻어 EXP_DARWIN_LINK의 szDarwinID와 szwDarwinID를 확인하는 절차
- Resolve의 SLR_INVOKE_MSI 플래그를 사용하면 실제로 MSI를 설치하도록 강제할 수 있으나 남용 위험이 있음
- 구성 경로와 바로가기가 다를 수 있으며, 바로가기에 포함된 명령줄 인수가 MSI 패키지에서 정의된 값임에 유의
주요 결과
- MSI 바로가기를 식별하고 대상 정보를 얻는 체계가 설명되어, 인벤토리 도구가 설치 UI를 트리거하지 않도록 정보를 우회하는 방법을 이해할 수 있음
- MSIShortcutTarget를 통해 설치 여부와 구성 요소 정보를 얻는 구체적 방법이 제시됨
- 원시 MSI 서술자에 대한 액세스 방법(EXP_DARWIN_ID_SIG)도 소개되어 확장 활용 가능성이 높아짐

