The SuezCollection
TheSuezCollectionLogo

WIX

Allgemein

CPack erzeugt XML-Dateien, die von WiX-Generator verwendet werden, um das Software-Paket zusammen zubauen. Speziell für den WiX-Generator hat CPack ein Patch-System, das es ermöglicht zusätzliche Elemente in den von CPack erzeugten Quell-Texten für den Generator einzufügen. Derzeit werden die Elemente Component, File, Directory und Feature unterstützt.

Injektion eines WiX-Elements

Der Einbau eines WiX-Elements wird mit einer Patch-Datei umgesetzt, die einen beliebigen Namen haben kann. Im folgenden Beispiel geht es um das "Enviroment"-Element. Grundvorausetzung ist das man sich mit Parametern und Attributen des WiX-Elements Elements vertraut macht. Z.B Dokumentation des WiX Enviroment Elements

Aufbau der Patch-Datei

Die Patch-Datei hat immer den selben Aufbau. Unterschiede gibt es nur hinsichtlich der verwendeten WiX-Elemente:
		
				

<CPackWiXPatch> <CPackWiXFragment Id= "CM_CP_bin.tm.exe"> <Environment Id="MyEnvironment" Action="set" Name="MEINEUMGEBUNG" Value="WertMeinerUmgebung"/> </CPackWiXFragment> </CPackWiXPatch>

Die eigentlichen WiX Elemente (hier nur eins) sind immer zwischen den zwei XML-Tags CPackWiXPatch und CPackWiXFragment zu finden. Durch das Id-Attribute im CPackWiXFragment wird der Bezug zu einem Objekt hergestellt, das installiert wird. Hier in diesem Fall ist es die Installation der Programms "tm". Wie diese Id ermittelt wird, wird weiter unten gezeigt.

Im Enviroment-Tag gibt es wieder eine Id, die als eindeutige Kennung des Tags dient. Das Attribute Action gibt an, was gemacht werden soll. Laut Dokumentation sind "create", "set" und "remove" möglich. Verwendet wird "set". Name ist der Name der Enviroment-Variablen und Value gibt den Wert an den sie bekommen soll.

Einbau

Projekt herunter laden .

Der Aufbau der CMakeLists.txt Datei ist denkbar einfach.
		

1: CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0) 2: IF (POLICY CMP0048) 3: CMAKE_POLICY(SET CMP0048 NEW) # Wg. VERSION im project Befehl 4: ENDIF (POLICY CMP0048) 5: 6: PROJECT(patch_env VERSION 1.2.3) 7: CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0) 8: 9: ADD_EXECUTABLE(tm tm.c) 10: INSTALL(TARGETS tm DESTINATION bin) 11: 12: INSTALL(FILES tm.c DESTINATION src) 13: 14: # Standard -------------------------------------------------------- 15: SET(CPACK_WIX_UPGRADE_GUID "C65BBF78-CE50-4534-BEDD-32881B31BE32") 16: SET(CPACK_WIX_CULTURES "de-DE") 17: SET(CPACK_GENERATOR WIX) 18: # Standard Ende --------------------------------------------------- 19: 20: SET(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/patch.xml") 21: 22: INCLUDE(CPack)

Erläuterungen

Ermittlung des Id-Attributes im CPackWiXFragment

Zuerst muss in der obiger CMakeLists.txt Datei die Zeile 20 auskommentiert werden. Anschliessend wird das Installations-Paket, wie in WiXSimple beschrieben, erstellt. Bei der Erstellung wird im Verzeichnis _CPack_Packages\win64\WIX die Datei features.wxs erzeugt, eine XML-Datei.
		
				

<?xml version="1.0 encoding="UTF-8?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi> <Fragment> <Feature Id="ProductFeature Display="expand Absent="disallow .../> <FeatureRef Id="ProductFeature> <ComponentRef Id="CM_CP_bin.tm.exe/> <ComponentRef Id="CM_CP_src.tm.c/> </FeatureRef> </Fragment> </Wix>

In dieser Datei ist die Id (CM_CP_bin.tm.exe), die in der Patch-Datei für das CPackWiXFragment-Tag benötigt wird. Nachdem sie in der Patch-Datei eingesetzt wurde, wird der Kommentar in Zeile 29 der CMakeLists-Datei entfernt und das Paket wie hier beschrieben zusammen gebaut.

Ergebnis

Nach der Installation ist folgender Eintrag in der Enviroment-Tabelle von Windows:
Ergebnis der Injektion
Bild 1: Ergebnis der Injektion