Wer kein ausgefeiltes Ordnungssystem auf seiner Festplatte einhält, kennt mit Sicherheit das folgende Szenario: Nur mal schnell zum Testen eine kleine Anwendung installieren, sich schnellstmöglich durch den Installationsassistenten klicken, der Ladebalken läuft auch schnell durch und dann muss man verwirrt innehalten. Wo genau wurde die Anwendung jetzt nochmal installiert? Auf dem Desktop ist keine Verknüpfung, im Startmenü gibt es keinen neuen Eintrag, erst die Windows-Suche liefert den Installationspfad und aus dem “nur mal schnell” wurden ein paar Minuten.
Um von Entwicklerseite solche Szenarien beim Anwender zu vermeiden, helfen Desktopverknüpfungen und Startmenüeinträge. Der dritte Teil der WiX Toolset Blogserie zeigt auf, wie die entsprechenden Verknüpfungen während der Installation angelegt werden können. Darüber hinaus müssen alle Komponenten auch wieder sauber entfernt werden, sobald die Anwendung deinstalliert wird.
Wie bereits im ersten Teil der WiX Toolset Blogserie dargestellt, folgen auch Desktop Shortcuts und Startmenüeinträge dem bekannten Muster aus Components, die einem Pfad zugeordnet werden und die eigentliche Datei enthalten. Bevor das Components-Element deklariert wird, muss jedoch zuerst wieder die Ordnerhierarchie aufgebaut werden. Dazu bedienen wir uns der mitgelieferten Standardwerte um zum ProgramMenuFolder und dem DesktopFolder zu navigieren. Im Folgenden wird eine Struktur dargestellt, die den Ordner “AIT” unterhalb von “Program Files” und einen zweiten Ordner “AIT” im Startmenü anlegt. Zusätzlich wird mit dem <Directory Id=”DesktopFolder” /> die Möglichkeit geschaffen, Dateien auf dem Desktop anzulegen.
Dies erfolgt, wie schon bekannt, über ein Component, das im entsprechenden DirectoryRef-Element erstellt wird. Dieses Component-Element erhält in diesem Fall drei Kindelemente. Dabei handelt es sich um ein Shortcut-Element, das den eigentlichen Shortcut enthält, ein RegistryValue-Element, das den KeyPath der Komponente enthält und ein RemoveFolder/File-Element, um die Deinstallation zu ermöglichen. Das RegistryValue-Element ist notwendig, da ein Shortcut-Element, im Gegensatz zu einem File-Element, nicht selbst als KeyPath fungieren kann. Der Windows-Installer überprüft vor der Installation, ob der entsprechende KeyPath bereits vorhanden ist und führt die Installation der Komponente nur durch, wenn dies nicht der Fall ist. Der Folgende Screenshot zeigt, wie das Component-Element für den Startmenüeintrag aufgebaut wird.
Das Shortcut-Element enthält den Namen des Shortcuts sowie die Zieldatei und das WorkingDirectory. Der Shortcut wird in diesem Fall auf die Datei Demo.exe im zuvor definierten Verzeichnis unterhalb des Ordners “Program Files” zeigen und diese ausführen.
Uninstall
Das RemoveFolder-Element enthält mindestens zwei Attribute. Eine eindeutige ID sowie das Attribut “On”, das den Vorgang bezeichnet, während welchem der Ordner entfernt werden soll. Hier sind die Werte Uninstall, Install und Both möglich. Welcher Ordner entfernt wird, wird dadurch bestimmt, in welchem DirectoryRef-Element sich die Komponente befindet. Der Folgende Screenshot zeigt ein Component-Element, das den Anwendungsordner in den “Program Files” entfernt. Dabei werden alle Files des Ordners über RemoveFile-Elemente entfernt. Um hier mehrere Dateien auf einmal zu löschen, können für den Dateinamen Wildcards vergeben werden. Abschließend wird noch der Ordner über das bekannte RemoveFolder-Element gelöscht. Ist ein Registry-Eintrag als KeyPath einer Komponente hinterlegt, wie im Beispiel der Shortcuts oben, so erfolgt das Entfernen des Eintrags automatisch mit dem Entfernen der Komponente.
Eventuell möchte ein Nutzer aber gar keinen Desktop-Shortcut anlegen? Oder er möchte die Anwendung lieber direkt mit dem Systemstart ausführen? Wie diese beiden Anwendungsfälle mit dem WiX Toolset abgebildet werden können, lesen sie im vierten Teil der WiX Toolset Blogserie.