MSI 파일에서 공용 속성 검색


12

Windows MSI 파일에서 사용 가능한 공용 속성을 검색하기위한 도구 또는 메커니즘이 있습니까?

MSI 파일을 제공하는 일부 공급 업체는 이러한 파일을 자체적으로 문서화하지 않으므로 소스 코드없이 이러한 파일을 노출 할 수있는 방법이 있는지 궁금합니다.


8
Microsoft의 ORCA , Pantaray의 SuperORCA 및 기타 모든 MSI 편집을 통해 테이블을 포함한 모든 테이블을 찾아 보거나 편집 할 수 있습니다 Property. MSI에서 파킹 주위에 특정 작업 흐름 또는 사용 사례가 있습니까?
jscott

2
사용 가능한 공용 속성을 이해하여 공급 업체 나 설명서를 쿼리하지 않고도 설치 중에 정확하게 전달할 수있었습니다 (항상 가능한 것은 아님). Puppet을 사용하면 설치 중에 MSI 속성을 전달할 수 있으므로 (misexec.exe를 래핑)이 기능을 사용하는 것이 편리합니다.
Ken Barber

1
속성 표에 나열되어 있지 않지만 설치를 제어하기 위해 전달할 수있는 다른 공용 속성이있을 수 있습니다. 조건, 레지스트리 검색 등에 따라 속성을 동적으로 설정할 수 있습니다. 따라서 공급 업체 문서는 더 나은 정보 소스입니다.
Alexey Ivanov

자세한 로깅을 사용하여 설치를 실행하여 특성이 값을 변경하는 방법을 확인할 수도 있습니다.
Alexey Ivanov

지연에 대해 죄송합니다-Orca와 그 매혹적인 것을 시도했지만 @AlexeyIvanov를 설명하는 동작을 확인했습니다. 즉, 일부 속성이 나타나지 않습니다. splunk.msi 및 해당 문서로이를 확인했습니다. Orca에 나타나는 것이 기본값을 가지고 있다고 생각하지만 이것은 정식 목록이 아닙니다. 자세한 로깅 방법에 대해 좀 더 설명해 주시겠습니까?
Ken Barber

답변:


8

Lessmsi 는 .msi에서 모든 특성을 검색하기위한 대화식 응용 프로그램뿐만 아니라 명령 줄을 제공합니다.

대화식으로 .msi를 연 다음 테이블보기 로 이동하여 "속성"을 선택하거나 입력하십시오. 그러나 이것은 속성 이름을 제공하지만 해당 속성에 유효한 값을 제공하지 않습니다. (또는 적절한 곳을 찾지 못했습니다.)

콘솔에 속성 테이블을 나열하는 명령 줄 (절약 적으로 간단한 > output.csv리디렉션 으로 캡처 할 수 없음 )

lessmsi l -t Property ...\path\to\setup.msi

1

MSI 파일 저장소 공용 속성이 내부 데이터베이스에 있다고 가정하면 실제로 VBScript 및 SQL을 사용하여 쿼리 할 수 ​​있습니다.

다음 은 MSI 파일에 저장된 모든 속성을 반환하는 스크립트 예 입니다. 대문자를 사용하여 공공 재산을 정의하는 것이 관례이므로 일반적으로 식별 할 수 있습니다.


1

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>일부 속성이 누락 될 수 있습니다.


이 방법의 문제점은 실제로 설치 프로그램을 실행해야한다는 것입니다. 비표준 targetdir에 설치하더라도 레지스터를 엉망으로 만들었습니다.
Wang

0

지금하는 방법은 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

-1

나는 아마도 아마도 그것을하는 가장 좋은 방법은 powershell을 사용하는 것이라고 생각합니다. 다음은 작업을 제대로 수행하는 스크립트입니다. https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


이 답변은 링크 일 뿐이며 변경되거나 사라질 수 있습니다.
David Makogon

단순히 링크 인 다른 답변이 있습니다. 다른 사람들의 코드를 복사하여 붙여 넣는 것이 불편하다고 생각합니다. 제 답변이 다른 대안을 제시한다고 생각합니다.
gigi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.