Öffentliche Eigenschaften aus einer MSI-Datei abrufen

12

Gibt es ein Tool oder einen Mechanismus zum Abrufen der verfügbaren öffentlichen Eigenschaften aus einer Windows MSI-Datei?

Einige Anbieter, die MSI-Dateien bereitstellen, dokumentieren diese nicht selbst. Daher bin ich gespannt, ob es eine Möglichkeit gibt, diese ohne den Quellcode bereitzustellen.

Ken Barber
quelle
8
Mit ORCA von Microsoft , SuperORCA von Pantaray und den meisten anderen MSI -Änderungen können Sie jede Tabelle einschließlich der PropertyTabelle durchsuchen / bearbeiten . Hatten Sie einen bestimmten Workflow oder Anwendungsfall außerhalb des MSI?
Jscott
2
Ich wollte die verfügbaren öffentlichen Eigenschaften verstehen, damit sie während der Installation korrekt übergeben werden können, ohne den Hersteller oder die Dokumentation abfragen zu müssen (da dies nicht immer möglich ist). Mit Puppet können wir MSI-Eigenschaften während der Installation übergeben (wir packen misexec.exe), daher ist es praktisch, diese Fähigkeit zu haben.
Ken Barber
1
Möglicherweise gibt es andere öffentliche Eigenschaften, die Sie zur Steuerung der Installation übergeben können, obwohl sie nicht in der Eigenschaftentabelle aufgeführt sind. Die Eigenschaften können abhängig von einer Bedingung, z. B. der Registrierungssuche, dynamisch festgelegt werden. Daher ist die Herstellerdokumentation die bessere Informationsquelle.
Alexey Ivanov
Sie können die Installation auch mit ausführlicher Protokollierung ausführen, um zu sehen, wie Eigenschaften ihre Werte ändern.
Alexey Ivanov
Entschuldigung für die Verzögerung - Ich habe Orca und sein faszinierendes Verhalten ausprobiert, aber ich habe das von Ihnen beschriebene Verhalten bei AlexeyIvanov bestätigt - das heißt, einige Eigenschaften werden nicht angezeigt. Ich habe dies mit splunk.msi und seinen Dokumenten bestätigt. Ich vermute, dass diejenigen, die in Orca erscheinen, Standardeinstellungen haben, aber dies ist keine kanonische Liste. Können Sie die ausführliche Protokollierungsmethode etwas näher erläutern?
Ken Barber

Antworten:

8

Lessmsi bietet eine Befehlszeile sowie eine interaktive Anwendung zum Abrufen von Attributen aus der MSI-Datei.

Öffnen Sie interaktiv die MSI-Datei und wechseln Sie in die Tabellenansicht. Wählen Sie "Eigenschaft" aus, oder geben Sie dies ein. Obwohl dies die Eigenschaftsnamen angibt, gibt es nicht die gültigen Werte für diese Eigenschaft an. (Oder ich habe nicht den richtigen Ort gefunden, um danach zu suchen.)

Befehlszeile zum Auflisten von Eigenschaften Tabelle zur Konsole (frustrierend, kann nicht mit einfacher > output.csvUmleitung erfasst werden )

lessmsi l -t Property ...\path\to\setup.msi
Matt Wilkie
quelle
1

Da in MSI-Dateien öffentliche Eigenschaften in einer internen Datenbank gespeichert sind, können Sie diese nur mit VBScript und SQL abfragen.

Hier ist ein Beispielskript , das alle in der MSI-Datei gespeicherten Eigenschaften zurückgibt. Es ist üblich, Großbuchstaben zu verwenden, um öffentliche Eigenschaften zu definieren, so dass sie normalerweise identifizierbar sind.

James Hebden
quelle
1

lessmsi ist ein großartiges Tool, das hier sicherlich funktioniert, wenn Sie bereit sind, die grafische Benutzeroberfläche zu öffnen und einige manuelle Untersuchungen durchzuführen . Ich werde jedoch sagen, dass der folgende Befehl nicht alle Eigenschaften zuverlässig darstellt:

lessmsi l -t Property <msi_name>

Eine Möglichkeit, um (besser) zu gewährleisten, dass Sie alle möglichen Eigenschaften erhalten, besteht darin, eine Installation, Reparatur oder Deinstallation mit der MSI-Datei durchzuführen und den Prozess zu protokollieren. Der folgende Befehl zeichnet nur die Eigenschaften und nichts anderes auf:

<msi_name> /lp! <msi_property_logfile>

Der obige Befehl entspricht:

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

Meine bevorzugte Methode ist jedoch, nicht wirklich zu installieren / entfernen / reparieren (und stattdessen einfach zu extrahieren). Die Vorteile dieser Methode gegenüber lessmsi bestehen darin, dass kein Dienstprogramm eines Drittanbieters (z. B. lessmsi ) erforderlich ist und Sie sich nicht mit Installationen herumärgern müssen . Vorausgesetzt, Sie haben genügend Speicherplatz, um das Programm tatsächlich zu installieren, können Sie Folgendes tun:

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

Beachten Sie, dass die <absolute_path_to_extract_to>Option auf ein nicht vorhandenes Verzeichnis verweisen kann (der Befehl erstellt die erforderlichen Verzeichnisse oder schlägt fehl).

Wenn Sie die Installationsbenutzeroberfläche aus irgendeinem Grund hassen, können Sie die /qrOption anhängen , die die Benutzeroberfläche "verkleinert" und möglicherweise beseitigt, ohne den Eigenschaftsprotokollierungsprozess zu beeinträchtigen. Seien Sie jedoch gewarnt - wenn Sie "niedriger" als die reduzierte Benutzeroberfläche ( /qb| /passiveoder /qn| /quiet) gehen, <msi_property_logfile>fehlen möglicherweise einige Eigenschaften.

YenForYang
quelle
Das Problem dieser Methode ist: Sie müssen das Installationsprogramm tatsächlich ausführen. Selbst wenn Sie es auf einem nicht standardmäßigen Zielverzeichnis installieren, haben Sie die Register trotzdem durcheinander gebracht.
Wang
0

Die Art, wie ich es jetzt mache, ist die Verwendung des Carbon Powershell-Moduls. So installieren Sie den Modultyp:

Install-Module -Name 'Carbon' -AllowClobber

Dann einfach

msi your_msi_path.msi

Beispiel:

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
quelle
-1

Ich denke, dass der wahrscheinlich beste Weg, dies zu tun, die Verwendung von Powershell ist. Hier ist ein Skript, das den Job wirklich gut macht: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c

Gigi
quelle
Diese Antwort ist nur ein Link, der sich ändern / verschwinden kann.
David Makogon
Es gibt andere Antworten, die einfach ein Link sind. Ich fühle mich nicht wohl beim Kopieren und Einfügen von Code anderer Leute. Ich denke, meine Antwort bietet eine alternative Option und ich verstehe die Abwärtsabstimmung wirklich nicht.
Gigi