WIX Installer: Die 13 besten Tipps

Das WIX Toolset besteht aus mehreren Werkzeugen (z.B. candle, light, burn) und Erweiterungen, die es einem erlauben, ein eigenes MSI-Package zu schnüren. Welche Tipps es für den WIX Installer gibt, erfahren Sie hier.

Inhaltsverzeichnis

Erstellen einer Batch-Datei für den WIX-Installer

Der WIX Installer arbeitet bekanntlichermaßen auf der Konsolen-Ebene. Und je dunkler der Konsolenhintergrund, desto komplizierter wird die Erstellung eines funktionierenden MSI Installers. Ok, Quatsch beiseite. Wenn man produktiv und zeitsparend mit dem WIX Installer arbeiten möchte, sollte man seine WIX-Befehle in eine .bat-Datei packen. Diese kann man dann entweder direkt mit Doppelklick aufrufen oder in der Taskleiste eine Verknüpfung erstellen. So wird das Schnüren des MSI Packages viel handlicher.

Mit heat die Dateien zusammentragen

Das Zusammentragen der für das Softwarepaket erforderlichen Dateien ist mit WIX gelinde gesagt etwas kompliziert. Jeder Datei muss eine ID und eine GUID vergeben werden. Aber zum Glück gibt es da ein Tool im WIX Toolset: heat. In einer Batchdatei sollte man die Arbeit dem fleißigen Rechner überlassen. Der heat-Befehl kann nämlich Verzeichnisse und Dateien sammeln, mit erforderlichen Infos versehen und diese so zusammenpacken, damit der MSI alle Dateien bei der Ausführung des MSI-Installers auf den Zielrechner kopiert. Die daraus entstandene wxs-Datei kann man dann ins Package einbinden.

Verwenden von Bundles (früher: mit Burn)

Wenn man für seine Software bestimmte Prerequisiten hat (wie z.B. das .NET Framework) kann man diese entweder separat ausliefern – mit dem Hinweis an den Kunden: „Bitte installieren Sie folgende Prereqs …“ oder man kann ihm die Arbeit abnehmen und alle benötigten Dateien in ein sogenantes Bundle packen. So macht der Kunde einen Doppelklick und alles andere läuft mit der Hilfe vom Bundle automatisch.

UpgradeCode unbedingt beibehalten

Es wäre wirklich sehr fabelhaft, wenn eine Software keine Updates bräuchte. Die bittere Realität lässt allerdings keine andere Wahl: Updates und Upgrades gehören nun mal zu einem vollständigen Softwarepaket dazu. Deswegen sollte der UpgradeCode im gesamten Package gleich bleiben. Und das gilt sowohl für die msi-Datei als auch für das Bundle.

Bei Updates immer Versionierung anpassen

Bei einer Aktualisierung des Programms muss auch die Version der Software des WIX-Installers auf Vordermann gebracht werden. So kann man sicher stellen, dass das neue Softwarepaket beim Rollout die alte Software automatisch deinstalliert.

WIX Installer: InstallScope

Man kann keine Äpfel mit Birnen vergleichen. Nein, kann man wirklich nicht. Und genau dieser Meinung ist auch das Microsoft Installer System. Es gibt entweder eine Installation für den Benutzer oder für den ganzen Rechner. Dieser sogenannte Installation Scope eines MSI-Packages hat massive Auswirkungen auf

  • den Installationsprozess
  • den Deinstallationsprozess
  • den Upgradeprozess

Deswegen sollte man sich schon bevor man den Lieblingstexteditor öffnet und dort anfängt, XML-Tags aneinanderzureihen, im Klaren sein, was man eigentlich möchte: Ist meine App benutzerspezifisch und wird z.B. deswegen irgendwo unter %APPDATA% installiert oder ist es ein Addin für ein Office-Produkt, welches für alle User zur Verfügung stehen muss?

WIX Installer: Bitness

Neben dem InstallScope muss man auch überlegen, welche Ausführung der Software man anbietet. Besser gesagt: Welche Ausführung der Software und des Installers. Soll die Software und der Installer 32 bit sein? Oder ein ganzes Bundle mit einem 64 bit Installer und einem Softwarepaket mit 64 und 32 bit? Dem WIX Installer ist es nämlich egal, was die Software kann oder zu können beansprucht. Es wird nicht automatisch geprüft, ob die beinhaltene .exe mit dem aktuellen System kompatibel ist. Darum muss sich der Entwickler kümmern, denn die Bitness eines MSI Packages hat Auswirkungen auf:

  • die Registry
  • die Dateipfade

Damit das nicht zu Verwirrungen führt, sollte man wissen, für welche Systeme man die Software ausliefert.

WIX Toolset: Extensions

Es gibt einige nützliche Extensions für das eigene Installer-Package:

  • NetFxExtension
  • UtilExtension
  • BalExtension

Wenn man diese in seinen WIX Installer einbindet, braucht man das Rad nicht neu zu erfinden und kann z.B. mit wenigen Zeilen XML prüfen, ob ein bestimmtes .NET-Framework installiert ist.

WIX Installer: Custom Actions

Spezielle Aufgaben, für die es bereits keine fertige Lösung gibt, erledigt man am Besten selber. Dazu kann man CustomActions definieren, denn z.B. so ein Visual Basic Script kann alles tun, was das Herz begehrt. Und der Trick bei der Sache ist: Man kann dem Script aus dem XML-Quellcode heraus Parameter übergeben, mit diesen weiter arbeiten und dann einen return-Wert dem XML zur Verfügung stellen.

Verwenden von .bat-Dateien für Deinstallation von anderer Software

Natürlich hat auch das Microsoft Installer System seine Limits: So kann man nicht aus seinem MSI-Paket heraus andere Software installieren oder deinstallieren. Dann kommt die berühmt-berüchtigte Fehlermeldung: „Error 1500. Another installation is in progress. You must complete the installation before continuing this one“. Oder es kommt gar nichts, wenn man die Installation mit einem Quiet-Schalter ausführt. Deswegen wäre es spätestens dann an der Zeit in sein Bundle zum Beispiel eine Batch-Datei anzulegen, die solche Aufgaben für einen vor der eigentlichen Installation erledigt.

Registry-Einträge spiegeln

Wenn man aus bestimmten Gründen seine Registry-Einträge sowohl unter

HKLM\Software\MySoftware

als auch unter

HKLM\Software\Wow6432Node\MySoftware

haben möchte, kommt man auch hier nicht drumherum externe Tools zu verwenden. Glücklicherweise bietet Windows von Haus aus solche kleinen Helferlein an. Richtig eingesetzt wirken sie nicht nur Wunder, sondern verhindern auch ein scheinbar unerklärliches Verhalten des eigenen WIX Installers und/oder der damit installierten Software.

Logische Ablaufreihenfolge beachten

Das Pferd von hinten aufzuzäumen mag bei einigen Sachen funktionieren. Aber sicherlich nicht beim Arbeiten mit dem WIX-Toolset. Deswegen gibt es im WXS-XML einen Tag InstallExecuteSequence, der festlegt, wann, was und in welcher Reihenfolge passieren soll. Aber nicht nur da: Die Prüfung der Conditions und die Eintragereihenfolge in Registry sollten so aufeinander abgestimmt sein, dass nicht nur die Reihenfolge im Quellcode stimmt, sondern auch der logische Ausführungsablauf.

Logging, Logging, Logging

Da das WIX Toolset sich erstmal nur in der Konsole gesprächig zeigt und beim Installieren aber „irgendetwas“ tut, ist es ratsam sich anzugewöhnen, die Installationsdatei jedesmal mit dem Log-Switch zu starten. So hat man schwarz auf weiß, was der eigene WIX Installer tut oder auch eben nicht tut. Das macht vor allem auch dann noch mehr Sinn, wenn man den Installer unter mehreren Arbeitsumgebungen testet.

Zusammenfassung

Wer mit der Erstellung von MSI-Packages mit Hilfe des WIX-Toolsets beginnt, der ist mit diesen Tipps fürs Erste gut bedient. Die nächsten Tage und Wochen werde ich den einen oder anderen Punkt etwas mehr präzisieren und mit Beispielen und tiefergehenden Erklärungen versehen. Also schauen Sie auf jeden Fall nochmal vorbei! Aber bis dahin und natürlich auch darüber hinaus können Sie sich bei Fragen gerne an mich wenden.

Titelbild von CopyrightFreePhotos.HQ101.com (Own work by uploader [1]) [Public domain], via Wikimedia Commons