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.


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

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ć.


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.


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

-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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.