Angenommen, ich baue mit WiX einen Installer, der – neben meiner MSI – externe Abhängigkeiten in Form weiterer MSIs enthalten soll. Dann kann ich diese mehreren Installer zu einem “Burn Bundle”, zu einer “Bootstrapper Application” zusammenführen.
Allerdings möchte ich natürlich nicht, dass der Enduser selber alle inkludierten Installer so konfigurieren muss, dass das Gesamtsystem in sich kompatibel ist. Anders gesagt: Ich möchte die externen Abhängigkeiten “still” in der von mir vorgegebenen Konfiguration isntallieren, und höchstens meinen eigenen Installer vom Enduser konfigurieren lassen.
Dafür gibt es ADDLOCAL: Eine kommaseparierte Liste von Features, die ich als Kommandozeilenparameter an den MSI-Installer der jeweiligen Abhängigkeit übergebe. Allerdings:
error WIX0365: The ‘ADDLOCAL’ MsiProperty is controlled by the bootstrapper and cannot be authored. (Illegal properties are: ‘ACTION’, ‘ADDLOCAL’, ‘ADDSOURCE’, ‘ADDDEFAULT’, ‘ADVERTISE’, ‘ALLUSERS’, ‘REBOOT’, ‘REINSTALL’, ‘REINSTALLMODE’, or ‘REMOVE’.) Remove the MsiProperty element.
🙄
Lösung: Eine MST Datei, die man dem Bundle hinzufügt. Das ist quasi eine Konfigurationsdatei für MSI Installer; in diesem Fall soll sie die ADDLOCAL-Konfiguration enthalten. Man kann so eine Datei auf mehreren Wegen erzeugen, aber ich bin ja nun auch nicht mehr der Jüngste, deshalb nehme ich Orca.exe, da habe ich ein GUI:
- Der Orca-Installer ist Teil des Windows SDK, also das herunterladen und installieren. Installationsverzeichnis öffnen, dort (der Ordner ist nicht indiziert, die globale Windowssuche findet das also nicht 🙄) nach “orca” suchen, dessen Installer starten und Orca installieren. Orca öffnen.
- Den gewünschten MSI Installer in Orca öffnen, “Transform” Menü → “New Transform”.
- In der Liste links die “Property” Tabelle öffnen, Rechts-Klick → “Add Row”, “Property” auf
ADDLOCAL, “Value” auf die gewünschten Werte setzen. - “Transform” Menü → “Generate Transform”, als irgendwas, bspw
VendorFeatures.mstspeichern
In der eigenen WiX .wxs-Datei dem MsiPackage hinzufügen:
|
1 2 3 4 |
<MsiPackage Id="SomeThirdPartyRuntime64" SourceFile="$(var.SomeThirdPartyRuntime)" Vital="yes" ForcePerMachine="yes"> <Payload Id="VendorFeatures.mst" Compressed="yes" SourceFile="$(var.TransformDir)\VendorFeatures.mst" /> <MsiProperty Name="TRANSFORMS" Value="VendorFeatures.mst" /> </MsiPackage> |
via Gaia. Crosspost auf SO. Danke, Nils.