Skript liefert Informationen über msi-Dateien

28. Februar 2010

Im Download-Verzeichnis liegt eine Windows-Installer-Datei namens mwta.msi – sie wurde vor einigen Jahren aus dem Web heruntergeladen. Nun weiß der Administrator nicht mehr, welchen Zweck sie erfüllen soll und auch der Dateinamen lässt keine weiteren Rückschlüsse zu. Wie lässt sich nun der Hersteller des Tools oder die Version der Software bestimmen, ohne das Programm zu installieren? Der rechte Mausklick auf eine msi-Datei und das Verzweigen in die Eigenschaften hilft da nicht viel weiter.

Das Skript MSIInfo löst diese Aufgabenstellung und ist für Abonnenten verfügbar. Dieses Werkzeug zeigt für die betreffenden msi-Dateien fünf Eigenschaften an.

Bild 1. Soll die Option Info hinzu kommen?
Bild 2. Der Windows Explorer unter Vista muss mit höheren Berechtigungen agieren.

Im Download-Verzeichnis liegt eine Windows-Installer-Datei namens mwta.msi – sie wurde vor einigen Jahren aus dem Web heruntergeladen. Nun weiß der Administrator nicht mehr, welchen Zweck sie erfüllen soll und auch der Dateinamen lässt keine weiteren Rückschlüsse zu. Wie lässt sich nun der Hersteller des Tools oder die Version der Software bestimmen, ohne das Programm zu installieren? Der rechte Mausklick auf eine msi-Datei und das Verzweigen in die Eigenschaften hilft da nicht viel weiter.

Wer auf seinem System das Tool Orca installiert hat, der kann über den rechten Mausklick und dann den Menüpunkt „Edit with Orca“ wählen und dann zu der Eigenschaften-Tabelle gehen und sich dort die Eigenschaften der msi-Datei anzeigen lassen. Doch dieses Vorgehen erfordert einen gewissen Zeitaufwand. Zudem verhält sich Orca nicht sonderlich gut: Das Tool ändert den Zeitpunkt für „zuletzt modifiziert“, selbst wenn das Tool keinerlei Änderungen an der msi-Datei vorgenommen hat.

Daher ist eine einfachere Lösung gefordert – sie steht mit dem Skript MSIInfo.js zur Verfügung (das Programm ist für Abonnenten verfügbar). Dieses Werkzeug zeigt für die betreffenden msi-Dateien fünf Eigenschaften an.
Zu den wichtigen Informationen gehört in erster Linie der Hersteller der Software (Manufacturer), die sich im msi-Paket befindet. Zudem sind die Bezeichnung der Software (der ProductName) sowie die entsprechende Versionsnummer (ProductVersion) interessante Informationen.

Des weiteren ermittelt das Skript noch die GUID (Globally Unique Identifier) die das Windows-Installer-Paket kennzeichnet (die Eigenschaft ProductCode9: Und als fünften Punkt ist noch der UpgradeCode zu nennen. Er gibt die GUID an, die Windows Installer verwendet, um nach zugehörigen Versionen eines installierten Produkts zu suchen. Denn die zugehörigen Produkte haben dieselbe GUID in Bezug auf den UpgradeCode.

Die Utility MSIInfo arbeitet ab Windows 2000 und besteht generell aus zwei Skripts:

  • MSIInfo.js – dieses Programm ermittelt die fünf besprochenen Informationen und
  • MSIInfo-Context.js – dieses Programm fügt die eine Windows-Explorer-Kontextmenü-Option hinzu. Damit kann sich der Administrator dann einfach mit einem rechten Mausklick auf eine msi-Datei diese Eigenschaften anzeigen lassen.

Diese beiden Skripts müssen nicht angepasst werden. Sprich der Administrator braucht nicht zu wissen, wie ein Skript zu lesen ist oder wo Modifikationen für die eigene Umgebung nötig sind. Der Administrator muss dann nur die ZIP-Datei für diesen Beitrag  herunterladen und sie entzippen, dann sind die beiden Skripts im selben Ordner zu platzieren.

Im zweiten Schritt ist die Kontext-Menü-Option für den Windows Explorer hinzuzufügen. Dazu muss man das Skript MSIInfo-Context.js Öffnen (nicht „Öffnen mit Eingabeaufforderung“). Dann wird noch einmal nachgefragt, ob die Aktion ausgeführt werden soll (siehe Abbildung 1). Hier ist auf Yes zu klicken (das Skript arbeitet in englischer Sprache). Dann wird eine Option mit der Bezeichnung Info in das Kontextmenü eingebaut.

Dieses Kontextmenü erscheint, wenn man im Windows Explorer mit einem rechten Mausklick auf eine msi-Datei geht. Soll diese Option später zurückgenommen werden, braucht man nur MSIInfo-Context.js noch einmal laufen lassen und dann ei der bachfrage, ob die Kontextmenü-Unterstützung entfernt (remove) werden soll mit Yes bestätigen.

Es gibt aber mit den Berechtigungen auf den verschiedenen Windows-Plattformen unter Umständen Probleme. Denn MSIInfo-Context.js benötigt höhere Berechtigungsstufen – sprich die eines Administrators.

Bei Windows 2003, Windows XP oder Windows 2000 muss man MSIInfo-context.js lediglich über ein Admin-Konto laufen lassen. Schwieriger wird es bei Windows Vista, wenn die Benutzerkontensteuerung (UAC User Account Control) aktiviert ist. Hier muss man die höheren Privilegien explizit angeben, selbst wenn man als Administrator am System angemeldet ist. Denn Windows Vista deaktiviert den Token für die Administrator-Gruppe in der Anmeldesession.

Wenn man eine Aktion ausführt, die höhere Berechtigungen benötigen, fragt das Betriebssystem nach einer Bestätigung, dass dieses Token der Administrator-Gruppe  aktiviert wird. Damit sollen unerwünschte Änderungen am System möglichst verhindert werden. Doch diese Vorgabe macht einige Verwaltungsaufgaben schwieriger – vor allem wenn Skripts mit höheren Berechtigungsstufen über den WSH (Windows Script Host) gestartet werden sollen.

Doch für diese Problemstellung gibt es einen Workaround bei Windows Vista. Zuerst muss der Administrator alle noch offenen Fenster mit dem Windows Explorer schließen. Dann ist der Windows Explorer neu zu starten und dann im Menü Extras die Ordneroptionen anzuklicken (Falls der Menüpunkt Extras nicht zu sehen ist, muss man F10 drücken). Dann ist auf den Reiter Ansicht zu gehen. Hier ist dann in der Liste mit den erweiterten Einstellungen  zur Option „Ordnerfenster in einem eigenen Prozess starten“ (Launch folder windows in a separate process) zu gehen und die zugehörige Checkbox zu aktivieren (Abbildung 2). Diese Auswahl ist dann mit Ok zu bestätigen und dann der Windows Explorer zu schließen.

Bild 3. Beispiel für die Ergebnisse, die MSIInfo liefert.

Im nächsten Schritt muss der Administrator dann eine Windows-Explorer-Verknüpfung (etwa wenn ein entsprechender Shortcut auf dem Desktop liegt) mit einem rechten Mausklick anzugehen. Danach ist aus dem Kontextmenü die Option „Als Administrator ausführen“ anzugeben und dann zu dem Verzeichnis zu gehen, in dem das Skript MSIInfo-Context.js liegt.

Dieses Skript ist dann auszuführen. Da die Windows-Explorer-Instanz mit Administratorrechten läuft, wird das Skript nun mit den entsprechend höheren Berechtigungen ausgeführt.

Bei Windows 7 ist es dagegen  nicht möglich, ein Windows-Explorer-Fenster mit derart höheren Berechtigungen zu öffnen, wenn die Benutzerkontensteuerung aktiv ist. Das scheint sich um einen Fehler bei Windows 7 zu handeln. Das lässt auch der dazu passende Diskussionsbeitrag vermuten.

Daher muss hier ein anderer Weg eingeschlagen werden: Der führt über ein Kommandozeilenfenster (also cmd.exe), das mit höherer Berechtigungsstufe agiert. Dazu muss man auf eine Verknüpfung mit cmd.exe mit einem rechten Mausklick gehen und dort die Option Als Administrator ausführen gehen.

Nach der Bestätigung, dass man cmd.exe als Administrator ausführen möchte, muss man den Pfadnamen für das Skript eingeben. Hier ist zu beachten, dass im Falle von Leerzeichen im Pfadnamen die doppelten Hochkommata verwendet werden müssen, also zum Beispiel

"C:\Admin Scripts\MSIInfo-Context.js"

Wenn das Skript dann die Bestätigung anzeigt, wie sie in Bild 1 zu sehen ist, muss man auch hier auf Yes klicken. Bei Windows Server 2008 dürften dieselben Vorkehrungen zu treffen sein wie bei Windows 7 (wurde aber vom Autor bislang noch nicht getestet).

Im nächsten Schritt ist dann noch das zweite Skript, MSIInfo.js zu starten. Das muss allerdings nicht unter einem Administrator-Konto erfolgen. Dann muss man nur noch im Windows Explorer zu der gewünschten msi-Datei navigieren und dann einen rechten Mausklick auf diese Datei ausführen.

Dann muss man die Option Info angeben. MSIInfo.js wird dann starten und alle fünf Eigenschaften für diese Datei in einer eigenen Message-Box anzeigen (siehe Abbildung 3).

Alternativ lässt sich MSIInfo.js auch über die Kommandozeile starten. Dazu ist die folgende Syntax nötig:

MSIInfo.js msifile [property]

Mit dem Parameter msifile wird der Pfad- und Dateiname für die msi-Datei angegeben, die es zu überprüfen gilt. Wenn der Pfadname der msi-Datei Leerzeichen enthält, muss man den Parameter noch in doppelten Hochkommata einbetten. Der Parameter property ist optional. Dabei kann man die folgenden Bezeichnungen (Groß- und Kleinschreibung sind zu beachten) nehmen:

  • Manufacturer,
  • ProductName,
  • ProductVersion,
  • ProductCode und
  • UpgradeCode.

Fehlt der Parameter property, zeigt MSIInfo.js alle fünf Eigenschaften an.
Wenn als Standard-Skripting-Host WScript eingestellt ist, werden die Eigenschaften in einer Message-Box dargestellt. Ist dagegen CScript eingestellt, werden die entsprechenden Informationen in einem Kommandozeilenfenster ausgegeben.

Bill Stewart/rhh

Lesen Sie auch