1 Einleitung

WiX ist ein Toolset, das Windows-Installationspakete aus XML-Quellcode erstellt. Das Toolset bietet eine Befehlszeilenumgebung, die Entwickler entweder in ihre herkömmliche Makefile-Buildprozesse oder in die neuere MSBuild-Technologie integrieren können. Innerhalb einer Entwicklungsumgebung - wie Microsoft Visual Studio oder SharpDevelop - kann das WiX-Toolset verwendet werden, MSI-Setup-Pakete zu erstellen.

WiX ist ein Open-Source-Projekt, das von Microsoft initiiert wurde und derzeit hauptsächlich von Rob Mensching vorangetrieben wird.

Das Toolset wurde mit .NET 3.5 in C# programmiert welches natürlich installiert sein muss, um das Toolset ausführen zu können. Dies gilt aber nur für das Toolset an sich. Für die Installationspakete, die mit dem Toolset erstellt werden, bedarf es keinerlei zusätzlicher Systeme oder Software, um diese Pakete auf dem Zielrechner installieren zu können. Es können möglicherweise einige zusätzliche Spezialanwendungen (Merge Modules, Patches) erforderlich sein, das aber nur auf dem Entwicklungsrechner. Der Client kommt allein mit den fertigen und eigenständigen Installer-Paketen aus.

Es besteht eine Community von WiX-Entwicklern und -Benutzern in einer thematisierten Mailingliste. Die Mailingliste wird von SourceForge betreut. Dies ist die Stelle, bei der man Rat und Informationen zu jedem Aspekt von WiX bekommt. Falls man schon einen Account auf SourceForge hat, ist es auch möglich, der Website beizutreten.

Die Entwicklung einer Anwendung abzuschließen bedeutet noch lange nicht, die Entwicklung zu Ende gebracht zu haben. In den letzten Jahren haben sich Benutzer daran gewöhnt, eine vollwertige und komplette Setup-Lösung zu erhalten — und da das Setup das Allererste ist, das die Endnutzer sehen, kann die Wichtigkeit eines Setups nicht genug betont werden.

Herkömmliche Setup-Tools benutzen eine programmatische und skriptbasierte Methode, um die unterschiedlichen Schritte (wie z. B. Daten kopieren, Registry-Einträge erstellen, Gerätetreiber und Services zum Starten) der zu installierenden Anwendung auf dem Zielrechner zu beschreiben. Der Windows Installer folgt einer anderen Philosophie: Bei ihm werden alle Schritte mithilfe einer Datenbank beschrieben.

Anders als viele andere Programme (wie z. B. InstallShield) beschreibt das Toolset das Setup über eine Art Programmiersprache. Perfekt in Visual Studio integriert, benutzt es eine Textdatei (die auf dem immer populärer werdenden XML-Format basiert), um alle Elemente des Installationsprozesses zu beschreiben. Das Toolset hat einen Compiler und einen Linker, die das Setup-Programm genauso erstellen, wie ein herkömmlicher Compiler die Anwendung aus den Quelldateien erstellt. Daher kann WiX ganz einfach zum Teil eines automatisierten Build-Prozesses gemacht werden.

Ein weiterer Vorteil von WiX ist, dass das Setup bereits von Anfang an in den Entwicklungsprozess mit eingeschlossen werden kann. Normalerweise werden Setup-Programme erst geschrieben, wenn die Hauptanwendung bereits fertiggestellt ist – oft sogar von unterschiedlichen Entwicklern. Diese Methode erfordert ein Integrationsdokument, in dem alle Informationen über alle Ressourcen eingetragen werden müssen. Bei WiX kann jeder Entwickler den Teil, den er selbst programmiert mit allen notwendigen Informationen in die XML-Datei eintragen und dokumentiert so bereits zu einem sehr frühen Zeitpunkt alle notwendigen Ressourcen. Wird WiX in den automatisierten Build-Prozess mit einbezogen, steht zu jedem Zeitpunkt eines Entwicklungsprozesses ein fertiges Setup bereit.

Da der Lernprozess relativ komplex und zeitintensiv ist und sich der Entwickler mit den Einzelheiten der zugrunde liegenden Windows Installer Technologie beschäftigen muss, hilft dieses Buch dem Entwickler.

1.1 Warum Windows Installer

Seit der Einführung von Windows 2000 sind Setups ein ganz selbstverständlicher Bestandteil des Betriebssystems. Dabei werden die Installationen vom Windows Installer-Service ausgeführt, der Funktionen wie z. B. selbstreparierende Anwendungen und On-Demand-Installationen unterstützt.

1.1.1 Möglichkeiten des Windows Installers

• Selbstreparierende Anwendungen sind durch die MSI API möglich. Wenn Dateien der Anwendung versehentlich gelöscht wurden, kann die betroffene Anwendung (oder auch Active Desktop bzw. Active Directory) über die API des Windows Installers diese Komponenten nachinstallieren und so die Anwendung reparieren.

• Mithilfe von Advertising braucht man Programmmodule erst dann zu installieren, wenn sie tatsächlich benötigt werden. So kann z. B. das Hilfesystem nachgeladen werden, wenn der Benutzer die Hilfefunktion aufruft.

• Über die Veröffentlichung einer Anwendung kann der Administrator einem Benutzer die Installation einer bestimmten Software anbieten. Diese Software kann der Anwender dann über die Softwaresteuerung installieren. Zusätzlich werden veröffentlichte Applikationen installiert, wenn der Anwender über den Explorer eine Datei anklickt, deren Dateiverknüpfung mit der veröffentlichten Anwendung verknüpft ist (so wird z. B. Microsoft Word nachinstalliert, wenn der Anwender auf eine .docx-Datei klickt).

• Über Zuweisung kann der Administrator bestimmen, dass Anwendungen automatisch bei bestimmten Benutzern im Advertise-Modus installiert werden. Dieser Vorgang läuft wie folgt ab: Der Benutzer meldet sich bei seiner übergeordneten Domäne an. Dort werden die Grupperichtlinien des entsprechenden Benutzerprofils ausgelesen. In diesem Profil ist dann das zu installierende MSI-Paket vermerkt, woraufhin der Windows Installer dieses Paket installiert. Da das Paket im Advertise-Modus installiert wird, merkt der Anwender von diesem Vorgang nicht viel. Es werden nur die Startmenü-Einträge und die Dateiverknüpfungen installiert. Die eigentliche Anwendung wird erst installiert, wenn sie benötigt wird.

• Mit Merge-Modulen steht eine standardisierte Technologie zur Verfügung, über die Laufzeit-Bibliotheken verteilt werden können. Der Installationsentwickler kann diese Module als „Blackbox“ betrachten und sie auf einfache Art und Weise in das Setup einbinden.

• Windows Sicherheitsprobleme werden minimiert, da die Installationen von einem System-service bearbeitet werden. Deshalb ist es nicht weiter zwingend erforderlich, dass der Anwender Admin-Rechte hat, um eine Anwendung korrekt zu installieren.

• Über die Installationsaffinität kann der Administrator bestimmen, wo sich die Anwendungs-dateien zur Laufzeit befinden. Anstatt alle Anwendungsdateien auf die Zielmaschine zu installieren, kann man einige oder alle Anwendungsdateien von einem Netzwerklaufwerk oder von einer CD-ROM starten.

• Rollback-Änderungen an der Zielmaschine werden bei der neuen Technologie als Transaktionen durchgeführt. Somit kann das System nach einem abgebrochenen Setup in seinen ursprünglichen Zustand zurückversetzt werden.

1.1.2 Probleme mit herkömmlichen Installationen

Die Anwender sahen sich bei herkömmlichen Installationsprogrammen zahllosen Problemen ausgesetzt, die wiederum die Total Cost of Ownership (TCO) der Systeme erhöht haben. Zu diesen Problemen gehören:

Gescheiterte Installationen: Eine gescheiterte Installation kann Bestandteile (Dateien, Registry-Einträge usw.) hinterlassen, die das System in einen instabilen oder gar unbrauchbaren Zustand versetzen. In herkömmlichen Setup-Programmen gab es keine standardisierten Rollback-Features für gescheiterte Installationen.

Zerstörte Anwendungen: Anwender konnten wichtige Dateien (auch Schlüsseldateien genannt, z. B. DLLs) löschen und damit die Applikation funktionsuntüchtig machen.

Probleme beim Deinstallieren: Bei herkömmlichen Setups konnte es passieren, dass nicht alle Bestandteile einer Anwendung beseitigt wurden. Andererseits konnte es zu Problemen kommen, wenn Dateien und Registry-Einträge von mehreren Anwendungen gemeinsam genutzt wurden. Dabei wurden nämlich solche Dateien bisweilen versehentlich entfernt, obwohl sie von anderen Anwendungen noch benötigt wurden.

Administration: Es war oft schwierig, Anwendungen auf eine große Anzahl von Kundenmaschinen zu verteilen. Administratoren mussten selbst bei jeder Maschine vor Ort sein. Es gab keine Standardmethode, Anwendungen über das LAN zu verteilen.

All diese Probleme werden mit der Verwendung des Windows Installers weitgehend beseitigt.