Abrufen der Version einer MSI-Datei (mit WiX erstellt)

8

Ich habe eine MSI-Datei mit WiX erstellt. Die Quell-WiX-Datei enthält die Versionsinformationen wie folgt:

%Vor%

Die MSI-Datei scheint in Ordnung zu sein: sie wird installiert, sie wird deinstalliert, sie wird aktualisiert, wenn ich die Versionsnummer usw. erhöhe.

Wenn ich jedoch versuche, die Versionsinformationen zu dieser Datei durch Aufrufen der MsiGetFileVersion () - API abzurufen, wird der Fehler 1006 (ERROR_FILE_INVALID  Die Datei enthält keine Versionsinformationen.)

Daher meine Frage: Wie kann man (programmatisch, in C ++) die Versionsnummer einer MSI-Datei abrufen? Oder, um es anders auszudrücken, wo in der WiX-Datei sollte die Versionsinformation gehen, um über MsiGetFileVersion () abrufbar zu sein?

Weitere Informationen: Derselbe Fehler tritt bei MSI 3.0 unter Windows XP und MSI 4.0 unter Vista auf.

    
Andrei Belogortseff 02.05.2009, 22:13
quelle

3 Antworten

6

Der Vollständigkeit halber ist :: MsiGetFileVersion () eine Funktion, die die Versionsressource-Informationen aus einer PE-Datei (.exe oder .dll) liest, die gleiche wie der Windows Installer tut. Dies ist wichtig, damit Build-Tools (z. B. das WiX-Toolset ) verwendet werden, damit sie die Informationen zur Datei / @ Version korrekt ausfüllen. Es wird nicht die Versionsinformationen aus einem MSI erhalten. Wie @sascha zeigt, könnten Sie die Property-Tabelle für die "ProductVersion" abfragen, oder Sie könnten die :: MsiGetProductProperty () verwenden, die dasselbe tut.

    
Rob Mensching 03.05.2009, 17:19
quelle
7

Zur Referenz: Hier ist ein VBScript-Beispiel, das ich in meinem Build-Prozess verwende, um vor dem Erstellen eines Bootrappers zu greifen.

%Vor%     
saschabeaumont 03.05.2009 02:03
quelle
4

Lösung gefunden: Rufen Sie anstelle von MsiGetFileVersion () auf:

%Vor%

(Fehlerbehandlung weggelassen)

    
Andrei Belogortseff 03.05.2009 00:29
quelle

Tags und Links