Pobieranie właściwości publicznych z pliku MSI

12

Czy istnieje narzędzie lub mechanizm do pobierania dostępnych właściwości publicznych z pliku MSI systemu Windows?

Niektórzy dostawcy, którzy dostarczają pliki MSI, nie dokumentują ich sami, więc jestem ciekawy, czy istnieje sposób na ujawnienie ich bez kodu źródłowego.

Ken Barber
źródło
8
ORCA Microsoftu , SuperORCA Pantaray i większość innych edycji MSI pozwoli ci przeglądać / edytować dowolną tabelę, w tym Propertytabelę. Czy miałeś specyficzny przepływ pracy lub przypadek użycia poza zwykłym gadaniem w MSI?
jscott
2
Chciałem zrozumieć dostępne właściwości publiczne, aby można je było dokładnie przekazać podczas instalacji, bez konieczności sprawdzania dostawcy lub dokumentacji (ponieważ nie zawsze jest to możliwe). Dzięki Puppet możemy przekazać właściwości MSI podczas instalacji (zawijamy misexec.exe), więc warto mieć tę możliwość.
Ken Barber
1
Mogą istnieć inne właściwości publiczne, które można przekazać w celu sterowania instalacją, chociaż nie są one wymienione w tabeli Właściwości. Właściwości można ustawiać dynamicznie w zależności od warunku, na przykład wyszukiwanie rejestru. Dokumentacja dostawcy jest więc lepszym źródłem informacji.
Aleksiej Iwanow
Możesz także uruchomić instalację z pełnym rejestrowaniem, aby zobaczyć, jak właściwości zmieniają swoje wartości.
Aleksiej Iwanow
Przepraszam za opóźnienie - próbowałem Orca i jej fascynujące, ale potwierdziłem zachowanie, które opisujesz @AlexeyIvanov - to znaczy, niektóre właściwości nie pojawią się. Potwierdziłem to za pomocą splunk.msi i jej dokumentów. Domyślam się, że te, które pojawiają się w Orce, mają wartości domyślne, ale nie jest to lista kanoniczna. Czy możesz wyjaśnić nieco więcej na temat metodologii rejestrowania pełnego?
Ken Barber

Odpowiedzi:

8

Lessmsi udostępnia wiersz poleceń oraz interaktywną aplikację do pobierania dowolnego atrybutu z .msi.

Interaktywnie otwórz .msi, a następnie przejdź do widoku tabeli i wybierz lub wpisz „Właściwość”. Jednak chociaż daje to nazwy właściwości, nie podaje prawidłowych wartości dla tej właściwości (lub nie znalazłem odpowiedniego miejsca do wyszukiwania).

Wiersz polecenia do listy Tabela właściwości do konsoli (frustrujące, nie można przechwycić za pomocą prostego > output.csvprzekierowania)

lessmsi l -t Property ...\path\to\setup.msi
matowe wilkie
źródło
1

Biorąc pod uwagę, że właściwości publiczne przechowujące pliki MSI w wewnętrznej bazie danych, możesz po prostu zapytać o nie przy użyciu VBScript i SQL.

Oto przykładowy skrypt , który zwróci wszystkie właściwości przechowywane w pliku MSI. Konwencjonalną metodą jest używanie wielkich liter do definiowania nieruchomości publicznych, aby w ten sposób można je zwykle zidentyfikować.

James Hebden
źródło
1

lessmsi to świetne narzędzie, które z pewnością działa tutaj, jeśli chcesz otworzyć GUI i przeprowadzić ręczne dochodzenie. Powiem jednak, że następujące polecenie nie przedstawia niezawodnie wszystkich właściwości:

lessmsi l -t Property <msi_name>

Jednym ze sposobów (lepszego) zagwarantowania uzyskania wszystkich możliwych właściwości jest przeprowadzenie instalacji, naprawy lub deinstalacji przy użyciu pliku MSI i zarejestrowanie procesu. Następujące polecenie rejestruje tylko właściwości i nic więcej:

<msi_name> /lp! <msi_property_logfile>

Powyższe polecenie jest równoważne z:

msiexec /lp! <msi_property_logfile> /i <msi_name>

Jednak moją preferowaną metodą jest nie instalowanie / usuwanie / naprawa (i po prostu wyodrębnianie). Zaletą tej metody w porównaniu z lessmsi jest to, że nie wymaga ona narzędzia innej firmy (tj. Lessmsi ) i nie wymaga bałaganu przy żadnych instalacjach. Biorąc pod uwagę, że masz wystarczająco dużo miejsca na dysku, aby faktycznie zainstalować program, możesz:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

Zauważ, że <absolute_path_to_extract_to>może wskazywać na nieistniejący katalog (polecenie utworzy katalogi konieczne lub nie powiedzie się).

Jeśli nienawidzisz interfejsu instalacyjnego z jakiegokolwiek powodu, możesz dołączyć /qropcję, która „zmniejszy” i prawdopodobnie wyeliminuje interfejs bez zakłócania procesu rejestrowania właściwości. Ostrzegamy jednak - jeśli przejdziesz „niżej” niż zredukowany interfejs użytkownika (tzn. /qb| /passiveLub /qn| /quiet), możesz <msi_property_logfile>nie mieć niektórych właściwości.

YenForYang
źródło
Problem tej metody polega na tym, że musisz uruchomić instalator. Nawet jeśli zainstalujesz go w niestandardowym katalogu docelowym, nadal zawiodłeś rejestry.
Wang,
0

Teraz robię to przy użyciu modułu Carbon Powershell. Aby zainstalować typ modułu:

Install-Module -Name 'Carbon' -AllowClobber

Więc po prostu

msi your_msi_path.msi

Przykład:

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
gigi
źródło
-1

Myślę, że teraz prawdopodobnie najlepszym sposobem na to jest użycie PowerShell. Oto skrypt, który naprawdę dobrze wykonuje to zadanie: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c

gigi
źródło
Ta odpowiedź to tylko link, który można zmienić / zniknąć.
David Makogon
Istnieją inne odpowiedzi, które są po prostu linkiem. Nie czuję się komfortowo kopiując i wklejając kod innych osób. Myślę, że moja odpowiedź daje alternatywną opcję i naprawdę nie rozumiem głosowania negatywnego.
gigi