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.
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.
Zur Referenz: Hier ist ein VBScript-Beispiel, das ich in meinem Build-Prozess verwende, um vor dem Erstellen eines Bootrappers zu greifen.
%Vor%Lösung gefunden: Rufen Sie anstelle von MsiGetFileVersion () auf:
%Vor%(Fehlerbehandlung weggelassen)
Tags und Links wix windows-installer version