Unter Windows ist es sinnvoll, ein Programm in Form eines Installationsprogramms anzubieten. In diesem Teil des Tutorials wird kurz auf das Zusammenspiel zwischen Qt und NSIS eingegangen.

Windows-Ressourcen

Im ersten Teil des Tutorials wurde die Projektdatei für qmake beschrieben. Zur Wiederholung sehen wir uns noch einmal den Windows-spezifischen Teil an:

Was verbirgt sich hinter der ominösen Ressourcen-Referenz?

Windows-exe-Dateien enthalten neben dem Programmcode sogenannte Ressourcen. Die bekanntesten Vertreter solcher Zusatzinformationen sind die Icons für das Programm. In der Ressourcen-Referenz werden solche Informationen für den Compiler definiert, damit er ein Windows-Programm samt Icons erstellen kann.

Die Ressourcen-Datei sieht im einfachsten Fall z.B. so aus:

Die Ressource verweist in diesem Fall auf eine Datei myIcons.ico, welche die Icons für die Applikation bereitstellt. Auf das Erstellen solcher Icon-Dateien unter Windows werde ich hier nicht eingehen – eine einfache Methode bietet beispielsweise das Freeware-Programm SimplyIcon.

Sowohl die Ressources-Datei als auch die Icons liegen im Unterverzeichnis win. Dies muss jedoch nicht so sein, räumt die Entwicklungsumgebung jedoch etwas auf.

Installer mit NSIS erstellen

Ein gutes Windowsprogramm wird mit einem Installer ausgeliefert. Dieser kümmert sich um das Installieren aller relevanten Dateien, sowie später auch um das saubere Löschen, falls das Programm wieder deinstalliert wird.

NSIS (Nullsoft Scriptable Install System) ist einer der populärsten Installer und wird auch im professionellen Bereich oft eingesetzt. NSIS ist Open Source und läuft im Übrigen auch unter Linux und Mac.

NSIS erwartet eine Installationsdatei. Diese ist eine einfache Textdatei mit entsprechenden Anweisungen. Wie diese Anweisungen aufgebaut sind, ist ebenfalls nicht Gegenstand dieses Tutorials – das Internet ist voll mit guten Tutorials zum Thema NSIS. Ein guter Einstieg für die Installation es Qt-Programms ist das folgende Skript:

Das Skript liegt, wie die anderen Windows-spezifischen Dateien, im Verzeichnis win.

Die wichtigsten Einstellungen befinden sich gleich am Anfang: Die Variable QT definiert den Ort, an dem sich die Qt-Binärdaten befinden (Qt Creator und Co.). Von dort muss der Installer einige DLLs kopieren (s.u.).

Wir verwenden die  NSIS-Skin „Modern UI”, die wesentlich schöner ist als das Standardaussehen des Installers. Im Win-Verzeichnis müssen daher 4 Bitmap-Dateien liegen, die in Zeile 35–38 definiert wurden. Dabei handelt es sich um Grafiken für den Installer. Die Header sind dabei 150×57 Pixel groß, die Wizard-Bilder 164x314px. Die Bild er sind optional. NSIS verwendet Standardbilder, falls keine angegeben wurden.

In Zeile 26–29 bestimmen wir, dass die Installation ggf. mit Superuser-Rechten ausgeführt werden muss. Das ist bei neueren Windows-Versionen (Vista, Windows 7) zwingend notwendig, wenn man Dateien in die Programmverzeichnisse kopieren will.

Zeilen 62–73 definieren den Installations- bzw. Deinstallationsdialog. Auch hier kann man bei Bedarf die Reihenfolge ändern oder bestimmte Punkte weglassen (z.B. Lizenzvereinbarung).

Interessant wird es in der Standardsektion des Installers (ab Zeile 93): Hier wird festgelegt, welche Dateien installiert werden, bzw. welche Dateien im Installer integriert werden. Für Qt-Programme sind folgende Dateien notwendig:

  • exe-Datei aus dem Release-Verzeichnis
  • mögliche Sprachdateien für Qt (Endung qm)
  • Ressourcen für das Programm sowie den Installer (im Beispiel z.B. die Lizenztexte im RTF-Format)
  • QT-DLLs – Essentiell, da das Programm sonst nicht ausführbar ist! Die im Beispiel gezeigten sind die Bibliotheken, die auf jeden Fall integriert werden müssen, wenn man den Qt-Creator und GCC als Compiler verwendet (deshalb die mingwm-DLL). Wird mit dem Compiler von Visual Studio gearbeitet, muss eine andere DLL eingebunden werden (steht in der Qt-Anleitung für Windows). Verwendet man weitere Qt-Module (z.B. Webkit oder Netzwerkklassen), müssen die dazugehörigen DLL-Dateien auch eingebunden werden.
  • Registry-Einträge für den Uninstaller
  • ggf. Einträge ins Startmenü und/oder auf den Desktop

Damit sind die wesentlichen Schritte getätigt. Wesentlich ist, dass die richtigen DLLs ausgewählt und im Installer verpackt werden. Nur so kann ein Qt-Programm ausgeführt werden – dies bedeutet aber auch gleichzeitig, dass die Größe der installierten Daten gewaltig wächst! QtCore4.dll und QtGui4.dll haben eine Größe von zusammen etwa 6 MB.

Beim Deinstallieren müssen natürlich alle Dateien gelöscht werden.