Windows MSI 파일에서 사용 가능한 공용 속성을 검색하기위한 도구 또는 메커니즘이 있습니까?
MSI 파일을 제공하는 일부 공급 업체는 이러한 파일을 자체적으로 문서화하지 않으므로 소스 코드없이 이러한 파일을 노출 할 수있는 방법이 있는지 궁금합니다.
답변
Lessmsi 는 .msi에서 모든 특성을 검색하기위한 대화식 응용 프로그램뿐만 아니라 명령 줄을 제공합니다.
대화식으로 .msi를 연 다음 테이블보기 로 이동하여 “속성”을 선택하거나 입력하십시오. 그러나 이것은 속성 이름을 제공하지만 해당 속성에 유효한 값을 제공하지 않습니다. (또는 적절한 곳을 찾지 못했습니다.)
콘솔에 속성 테이블을 나열하는 명령 줄 (절약 적으로 간단한 > output.csv
리디렉션 으로 캡처 할 수 없음 )
lessmsi l -t Property ...\path\to\setup.msi
답변
MSI 파일 저장소 공용 속성이 내부 데이터베이스에 있다고 가정하면 실제로 VBScript 및 SQL을 사용하여 쿼리 할 수 있습니다.
다음 은 MSI 파일에 저장된 모든 속성을 반환하는 스크립트 예 입니다. 대문자를 사용하여 공공 재산을 정의하는 것이 관례이므로 일반적으로 식별 할 수 있습니다.
답변
lessmsi 는 GUI를 열고 수동으로 조사하려는 경우 확실히 작동하는 훌륭한 도구입니다. 그러나 다음 명령으로 모든 속성을 안정적으로 표시 할 수는 없습니다.
lessmsi l -t Property <msi_name>
가능한 모든 속성을 얻을 수있는 한 가지 방법은 실제로 MSI 파일을 사용하여 설치, 복구 또는 제거를 수행하고 프로세스를 기록하는 것입니다. 다음 명령은 속성 만 기록하고 다른 것은 기록하지 않습니다.
<msi_name> /lp! <msi_property_logfile>
위의 명령은 다음과 같습니다.
msiexec /lp! <msi_property_logfile> /i <msi_name>
나의 선호하는 방법은, 그러나,하는 것입니다 하지 실제로 (그리고 단순히 대신 추출) / 삭제 / 복구를 설치합니다. 이 방법이 lessmsi에 비해 장점 은 타사 유틸리티 (예 : lessmsi )가 필요하지 않으며 설치를 망칠 필요가 없다는 것입니다. 실제로 프로그램을 설치하기에 디스크 공간이 충분하면 다음을 수행 할 수 있습니다.
msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>
것을 참고 <absolute_path_to_extract_to>
존재하지 않는 디렉토리에 캔 포인트 (명령이 필요한 디렉토리를 만들거나 실패합니다).
어떤 이유로 든 설치 UI를 싫어하는 경우 /qr
옵션을 추가 할 수 있습니다 . 이렇게하면 속성 로깅 프로세스가 손상되지 않으면 서 UI가 ‘감소’되고 UI가 제거 될 수 있습니다. 그러나 축소 된 UI (즉 , /qb
| /passive
또는 /qn
| /quiet
) 보다 “낮게”이동하면 <msi_property_logfile>
일부 속성이 누락 될 수 있습니다.
답변
지금하는 방법은 Carbon Powershell 모듈을 사용하는 것입니다. 모듈 유형을 설치하려면
Install-Module -Name 'Carbon' -AllowClobber
그런 다음 간단히
msi your_msi_path.msi
예:
msi putty-64bit-0.70-installer.msi
ProductName ProductVersion Manufacturer ProductCode
----------- -------------- ------------ -----------
PuTTY release 0.70 (64-bit) 0.70.0.0 Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2
답변
나는 아마도 아마도 그것을하는 가장 좋은 방법은 powershell을 사용하는 것이라고 생각합니다. 다음은 작업을 제대로 수행하는 스크립트입니다.
https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c