Einleitung
Die meisten Anwendungen kommen mit einem Installations-Programm, das die benötigten Dateien in die richtigen Ordner kopiert, Registry-Einträge erstellt und Deinstallations-Routinen bereitstellt, um die Anwendung (hoffentlich) wieder sauber vom Computer zu entfernen.
Um selber entwickelte Anwendungen mit einem Installer auszustatten gibt es verschiedene Lösungen. Neben kommerziellen Produkten wie Install Shield oder Wise gibt es auch das OpenSource-Installationstool Nullsoft Scriptable Install System (NSIS). In diesem Tutorial zeige ich einige einfache Schritte, um einen Installer mit NSIS zu erstellen.
Im ersten Teil erläutere ich einige Grundlagen und wir erstellen den ersten richtigen Installer. Der zweite Teil behandelt die Themen Uninstall und weitere Dialoge für den Installer. Im dritten Teil gebe ich den Installern ein moderneres Erscheinungsbild. Der vierte Teil wird zeigen, wie man mit Hilfe des Dependency Walkers die zusätzlich benötigten Libraries identifiziert und diese dann in den Installer einbindet.
Download und installation
NSIS kann unter http://nsis.sourceforge.net/Download heruntergeladen werden. Danach startet man die heruntegeladene Datei, welche NSIS installiert. Normalerweise können die vorgegebenen Werte übernommen werden.
Grundlagen
NSIS erzeugt eine Installationsdatei, die alle zu installierenden Dateien und das Installationsscript enthält. Dazu muss man ein NSIS Script erstellen, welches die installationsschritte beschreibt. Ein NSIS Script ist eine normale Textdatei, die mit jedem Texteditor bearbeitet werden kann. Da NSIS bei Fehlermeldungen die betroffene Zeile angibt, ist es von Vorteil, einen Texteditor zu benutzen, der die Zeilennummern anzeigen kann.
Im Wiki von NSIS hat es eine Auflistung von Editoren speziell für NSIS. Ich benutze für dieses Tutorial den HM NIS Edit.
NSIS Script-Dateien haben die Dateiendung .nsi. NSIS Scripts können zur besseren Übersicht auch in mehrere Dateien aufgeteilt werden, indem man Funktionen oder Makros in Header-Dateien auslagert. Die Headerdateien erhalten dann die Dateiendung .nsh und werden mit dem Befehl !include eingebunden.
Kommentare werden mit einem Semikolon - ';' - begonnen und enden mit dem Zeilenende. Auch alle Befehle enden mit dem Zeilenende. Wenn sich ein Befehl über mehrere Zeilen erstrecken soll muss am Zeilenende ein Backslash - '\' - hizugefügt werden.
Hello World!
Als erstes "Installer"-Script erstellen wir das berühmte "Hello World" Beispiel. Dazu muss in einem Text-Editor folgender Text eingegeben werden:
Name "Hello World"
OutFile "helloworld.exe"
Section "Hello World"
MessageBox MB_OK "Hello World!"
SectionEnd
Dieser Text wird nun unter dem Dateinamen "helloworld.nsi" abgespeichert. Nun kann der Compiler gestartet werden. Entweder direkt über den Editor (z.B. mit HM NIS Edit) oder über die Kommandozeile mit:
<Pfad zu NSIS>\makensis.exe <Pfad zu Script>\helloworld.nsi
Wenn das Script fehlerfrei kompiliert werden konnte sollte eine Datei mit dem Namen "helloworld.exe" im Spriptordner erstellt worden sein. Durch Starten dieser Anwendung sollte eine Installerfenster erscheinen und davor eine MessageBox mit dem Text "Hello World!". (Abbildung)
Erklärung der benutzten Befehle:
Name
Setzt den Namen des Installers. Normalerweise entspricht er dem Namen der Anwendung, Z.B. "MyApp". Wenn der Name ein oder meherere '&' enthält, muss als zweiter Parameter der Name mit verdoppelten '&' angegeben werden, z.B.
Name "Super & Co.'s MegaApp" "Super && Co.'s MegaApp"
OutFile
Setzt den Namen der Ausgabe-Datei. Kann auch den Pfad enthalten, z.B.
OutFile "C:\Temp\Output.exe"
Section
Startet einen neuen Bereich. Bereiche können auch versteckt werden, optional sein oder für den uninstaller verwendet werden. Der Bereich wird mit SectionEnd abgeschlossen.
MessageBox
Zeigt ein Meldungsfenster mit den angegebenen Optinen ("Zeige den OK-Button") und dem angegebenen Text an.
Erster "richtiger" Installer
Um auch wirklich etwas auf der Harddisk abzulegen braucht es nicht viel mehr:
Name "First Installer"
OutFile "firstinstaller.exe"
InstallDir $PROGRAMFILES\MyFirstInstaller
Page directory
Page instfiles
Section ""
SetOutPath $INSTDIR
File C:\Windows\system32\notepad.exe
SectionEnd
Name und OutFile kennen wir ja schon aus dem HelloWorld-Installer. InstallDir setzt den Default-Installationspfad. Mit der Konstanten $PROGRAMFILES wird der konfigurierte Programme-Ordner (bei einer deutschen Windows-Version "C:\Programme\", bei einer englischen "C:\Program files") angesprochen. In diesem Beispiel wird deshalb als Default-Ordner unter einer deutschen Windows-Version "C:\Programme\MyFirstInstaller" verwendet. Mit dem Befehl Page geben wir an, welche Seiten im Installer angezeigt werden sollen. In diesem Fall wird zuerst der Dialog für die Installationsordner-Abfrage angezeigt. Danach folgt der eigentliche Installations-Dialog, in welchem die Dateien kopiert werden.
Innerhalb der Section wird dann mit SetOutFolder der Ordner für die Installation bestimmt und auch erzeugt. Mit File werden die Dateien angegeben, die in den Installationsordner extrahiert werden sollen.
Ausblick
Im zweiten Teil werden wir unserem Installer auch die Möglichkeit geben, das Programm wieder zu deinstallieren. Zudem werden wir ein Paar weitere Pages anschauen und dem Benutzer die Möglichkeit geben, bestimmte Teile der Installation auszuwählen. Im dritten Teil werder wir dann ein MFC-Programm mit dem Dependency Walker untersuchen um benötigte Komponenten zu bestimmen. Die Komponenten werden dann natürlich mit unserem Installer kopiert und registriert.

