Das WiX Toolset – Installer einfach erstellen
Hilfe, ich brauche einen Installer! windows.developer 12/2016
Zu Beginn eines Entwicklungsprozesses muss man sich um vieles kümmern: Architektur, Konzepte und Verantwortlichkeiten sind nur ein kleiner Teil des Ganzen. Dabei wird oft ein wesentlicher Bestandteil im DevOps Cycle vergessen: die Verteilung der Anwendung, wenn sie fertig ist. Anders formuliert: Wie installiert der Nutzer später die Software auf seinem System?
Aufbau des WiX-Projekts
Zentraler Punkt eines WiX-Projekts ist das Product-Element. Das Product kann als Einstiegspunkt verstanden werden, unter dem sich weitere Elemente vereinen. Ein Pflichtelement ist dabei das Package. Die dort eingetragenen Attribute sind später in den Eigenschaften der Installationsdatei einsehbar, beeinflussen aber auch deren Ausführung. Hier können beispielsweise Versionsnummern, Herstellerinformationen, aber auch die benötigten Rechte, um die Installation ausführen zu können, definiert werden.
Ein weiteres Kernelement ist das Feature. Damit lassen sich funktionale Unterscheidungen sauber trennen sowie später aus dem Installer herausnehmen, ohne große Anpassungen vornehmen zu müssen. Ein Feature-Element kann als „kleinste installierbare Einheit“ gesehen werden. Unter ihr werden einzelne Komponenten aufgeführt, die gemeinsam installiert werden. Über das Level-Attribut können Features von der Installation ausgeklammert werden. Dies kann beispielsweise für verschiedene Lizenzen oder aber für während der Installation vom Nutzer an- und abwählbare Features genutzt werden. In der Standardeinstellung werden alle Features mit Level 1 installiert, Features mit Level 0 sind deaktiviert. Dies kann über die InstallLevel Property, deren Default 1 ist, auch feingranularer gestaltet werden.
Über das Media-Element besteht die Möglichkeit, die Dateien der Installation auf mehrere Cabinets, und somit die Installation auf mehrere Datenträger zu verteilen. Da dies in Zeiten der Softwaredownloads selten nötig ist, empfiehlt es sich, alle Dateien innerhalb einer *.msi zu bündeln.
Die Ordnerstruktur der Anwendung wird über einfache Verschachtelung von Directory-Elementen festgelegt. Zur besseren Übertragbarkeit auf unterschiedliche Systeme werden bestimmte Werte vordefiniert. So verweist beispielsweise das Directory-Element mit der ID „WINDOWSVOLUME“ auf jedem System auf die Installationspartition des aktuellen Windows-Betriebssystems.
Um die eigentlichen Installationsinhalte zu strukturieren, werden Component- oder ComponentGroup-Elemente, die mehrere Component-Elemente zusammenfassen, benutzt. Diese werden über ihre ID jeweils mindestens einem Feature zugeordnet. Component-Elemente, die keinem Feature zugeordnet wurden, erzeugen Link Errors und verhindern so einen erfolgreichen Build des WiXProjekts. Wichtig ist an dieser Stelle, dass die angesprochenen Elemente nicht in der gleichen Datei liegen müssen. Es ist also möglich, die Anwendungsarchitektur auch im Installationsprojekt abzubilden und so den Dokumentationsaufwand zu minimieren.
Das Component-Element selbst kann beliebig viele Elemente verschiedener Typen beinhalten. Das am häufigsten benötigte Element ist das File-Element. Es dient zur Definition einer Datei, die während der Installationsroutine kopiert werden soll. In diesem Fall kann ein File auch als Key Path für die Komponente dienen. Der Windows Installer überprüft vor der Installation, ob der entsprechende Key Path bereits vorhanden ist und führt die Installation der Komponente nur durch, wenn dies nicht der Fall ist. Für andere Elemente müssen Key Paths entsprechend manuell vergeben werden. Abbildung 1 visualisiert den Aufbau eines WiX-Toolset-Projekts. …