Bereitstellung von Anwendungen und Generierung von Offline-Installationsprogrammen für Windows Qt Installer Framework Tutorial

Software-Entwicklung
2025-01-24
11 Minuten
Qt Installer Framework-Tutorial

Die Entwicklung ist nicht der einzige Teil der Produktbereitstellung – Bereitstellung und Wartung sind ebenso wichtige Teile des Produktlebenszyklus. Aus diesem Grund unterstützt uns Qt mit dem Installer Framework. Dabei handelt es sich um eine Reihe von Werkzeugen, mit denen sich nicht nur gut aussehende und funktionale Installer erstellen lassen, sondern die auch die Aktualisierung der Anwendung, die Bereitstellung von Werkzeugen für die Wartung und vieles mehr ermöglichen. In diesem Tutorial lernen Sie die Grundlagen des Qt Installer Frameworks kennen und erfahren, wie Sie Ihren ersten Offline-Installer für Windows erstellen können. Los geht’s!

Wenn Sie das Qt-Framework und seine Funktionen noch nicht kennen, lesen Sie zunächst unseren Blog-Beitrag Über Qt und wie man damit GUIs erstellt.

 

Wie erhält man das Qt Installer Framework?

Das Qt Installer-Framework kann einfach über das Qt-Wartungstool installiert oder aus dem Qt-Repository heruntergeladen werden. Wenn Sie ein Wartungstool verwenden, finden Sie es im Abschnitt Entwickler- und Designer-Tools:

 

Nach dem Herunterladen sollte es in [QtDirectory]/Tools/QtInstallerFramework gespeichert werden.

 

Wie erzeugt man einen Installer mit dem Qt Installer Framework?

 

1. Erstellen Sie einen Bereitstellungsordner

Bevor Sie ein Installationsprogramm erstellen, müssen Sie Ihre Anwendung für die Bereitstellung vorbereiten. Der erste Schritt besteht darin, einen Bereitstellungsordner zu erstellen, in dem alle erforderlichen Dateien für die Ausführung der App und die Erstellung des Installationsprogramms gespeichert werden. Innerhalb dieses Ordners sollten Sie zwei Verzeichnisse erstellen: „config“ und ‚packages‘.

 

Wie der Name schon sagt, enthält das erste Verzeichnis Konfigurationsdateien für Ihr Installationsprogramm – in diesem Fall eine einzige XML-Datei. Was sollte diese Datei enthalten?

 

2. Erstellen Sie eine Konfigurationsdatei

Die Konfigurationsdatei enthält einige allgemeine Informationen über die Anwendung: Installationsverzeichnis, Name des Installationsprogramms usw. Sie können einige interessante Dinge tun, indem Sie diese Datei ändern – zum Beispiel ein Kontrollkästchen „nach der Installation ausführen“ hinzufügen, die Benutzeroberfläche des Installers ändern oder sogar entfernte Repositories zum Abrufen von App-Updates hinzufügen. Sie können sich über alle verfügbaren Tags in der Qt Installer Dokumentation informieren.

Lassen Sie uns eine solche Datei erstellen. Die grundlegende Datei sollte wie folgt aussehen:

 

<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>APP NAME</Name>
    <Version>1.0.0</Version>
    <Title>INSTALLER WINDOW TITLE</Title>
    <Publisher>Scythe Studio</Publisher>
    <StartMenuDir>START_MENU_DIR</StartMenuDir>
    <TargetDir>@HomeDir@/APP_DIR</TargetDir>
</Installer>

Es ist zwar minimalistisch, aber für den Moment reicht das aus.

 

3. Ein Paket erstellen

Bevor Sie weitermachen, sollten Sie lernen, was ein Paket eigentlich ist. Das Paket ist ein Modul, das eine bestimmte Version oder einige Teile der App enthält. Wenn Sie viele Pakete einschließen, kann die Installation angepasst werden – die Benutzer können auswählen, was sie installieren möchten. Qt selbst ist ein gutes Beispiel für einen solchen Ansatz. Werfen wir einen Blick auf die Baumstruktur im Qt-Installationsprogramm:

 

Wie Sie sehen, ist das Framework in mehrere Pakete unterteilt, die Kits für verschiedene Plattformen und Module mit optionalen Funktionen wie einer Web-Engine enthalten.

Gemäß der Dokumentation sollte das Verzeichnis der Pakete folgende Struktur haben:

 

-packages
    - com.vendor.root
        - data
        - meta
    - com.vendor.root.component1
        - data
        - meta
    - com.vendor.root.component1.subcomponent1
        - data
        - meta
    - com.vendor.root.component2
        - data
 - meta

Mit diesem Wissen können Sie nun damit beginnen, die ersten Pakete für unsere Anwendung zu erstellen. Der Einfachheit halber werden wir zunächst nur zwei Pakete erstellen: eine 64-Bit-Version der Anwendung und eine 32-Bit-Version.

Beginnen Sie mit der Erstellung geeigneter Verzeichnisse für die Pakete. Wir werden uns an das Namensschema „com.developername.shortpackagename“ halten:

 

Was ist mit dem Inhalt der Pakete? Fangen wir an, sie zu füllen!

 

4. Metadaten hinzufügen

Jedes Paket sollte zwei Hauptverzeichnisse enthalten: „data“ und „meta“. Das erste enthält ausführbare Dateien, Bibliotheken und andere Dateien, die für die Ausführung der Anwendung erforderlich sind, während das zweite Informationen über das Paket enthält. Der „Meta“-Ordner enthält in diesem Fall nur zwei Dateien, also beginnen Sie mit ihm.

 

Die Metadaten sollten aus den Dateien „license.txt“ und „package.xml“ bestehen. Die Textdatei ist offensichtlich – sie versorgt das Installationsprogramm mit dem Lizenzinhalt. Sie hat kein vorgeschriebenes Format, aber HTML-Tags werden unterstützt, falls Sie eine bestimmte Gestaltung benötigen.

Reden wir nun über „package.xml“ – diese Datei ist interessanter. Diese Datei enthält Informationen über das Paket, die im Fenster des Installationsprogramms angezeigt werden. Durch das Einfügen zusätzlicher Tags können Sie benutzerdefinierte Installer-Seiten, Übersetzungen, Abhängigkeiten zwischen anderen Paketen und vieles mehr hinzufügen. Wir werden über diese Datei in einem anderen Teil des Tutorials, der in Zukunft veröffentlicht wird, noch einmal sprechen. Der Inhalt der „package.xml“ sollte vorerst so aussehen:

 

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>PACKAGE NAME</DisplayName>
    <Description>This is going to install APP NAME on your machine</Description>
    <Version>1.0.0</Version>
    <ReleaseDate>2020-06-17</ReleaseDate>
    <Licenses>
        <License name="LICENSE TITLE" file="license.txt" />
    </Licenses>
    <Default>true</Default>
</Package>

Die meisten der Tags sind selbsterklärend. Wenn Sie mehr über andere Tags erfahren möchten, lesen Sie die Dokumentation.

 

5. Datenverzeichnis befüllen

Wenn Sie dem Verzeichnis „meta“ die erforderlichen Dateien hinzufügen, verschieben Sie eine in den Ordner „data“. Dieses Verzeichnis enthält alle Anwendungsdateien, die das Paket enthält. Bei der Installation des Pakets wird sein Inhalt in das Zielverzeichnis entpackt. Um den Installationsordner übersichtlich zu halten, empfehlen wir, einen zusätzlichen Unterordner im data-Verzeichnis anzulegen.

 

Da es bereits eine große Anzahl von Ordnern gibt, über die wir gesprochen haben, nennen wir diesen einen „Paketdateiverzeichnis“. Damit wäre es einfacher, den Überblick zu behalten.

Jetzt beginnt der entscheidende Teil der Vorbereitung der Bereitstellung. Innerhalb des Paketdateiverzeichnisses müssen Sie eine beträchtliche Menge an Dateien hinzufügen, die benötigt werden, um eine Anwendung außerhalb der Qt Creator-IDE auszuführen: alle ausführbaren Dateien, Qt- und externe Bibliotheken, dll-Dateien, usw. Glücklicherweise hilft uns das Qt Framework dabei, indem es eine Reihe von Tools für die Bereitstellung bereitstellt.

Fügen Sie nun die ausführbare Datei in das Verzeichnis der Paketdateien ein. Kopieren Sie sie einfach aus dem Build-Ordner. Öffnen Sie nun das Kommandozeilenterminal im Verzeichnis der Paketdateien. Es wird benötigt, um „windeployqt.exe“ auszuführen – ein Tool zum automatischen Laden aller Qt dll-Dateien, die für die Ausführung der Anwendung benötigt werden. Um dieses Tool auszuführen, verwenden Sie diesen Befehl:

 

[QtFolder]\[QtVersionThatYouUse]\[SelectedKitDirectory]\bin\windeployqt.exe APPNAME.exe --qmldir [DirectoryContainingProjectQMLSourcecode] --compiler-runtime

Dieser Befehl fügt (fast) alle erforderlichen Binärdateien und Dateien hinzu, die Sie zum Starten einer QML-basierten Anwendung benötigen. Das Flag -qmldir wird verwendet, um Ihren QML-Code zu scannen und alle benötigten Laufzeitbibliotheken aus dem Qt Quick-Modul hinzuzufügen. Geben Sie nach diesem Flag Ihr Projektverzeichnis an – keine Sorge, es wird rekursiv gescannt. Wenn Ihre Anwendung nicht auf QML basiert, können Sie dieses Flag auslassen.

Im Fall des Tutorials sollte der vollständige Befehl wie folgt aussehen:

 

C:\Qt\5.15.0\mingw81_64\bin\windeployqt.exe QtInstallerTutorial.exe --qmldir C:\Projects\QtInstallerTutorial --compiler-runtime

Wenn das Tool seine Arbeit beendet hat, können Sie sehen, dass das Verzeichnis der Paketdateien nun voll ist.

Derzeit neigt das windeployqt-Tool dazu, eine Menge unnötiger Dateien mitzuliefern, aber auch jetzt gibt es nicht jede Datei, die Sie benötigen. Noch nicht…

 

6. Hinzufügen der compilerspezifischen Dateien

Wenn Sie jetzt versuchen, die Anwendung auszuführen, erhalten Sie eine Fehlermeldung mit Informationen über fehlende Dateien. Je nach Konfiguration müssen compilerspezifische und einige andere Bibliotheken zusammen mit Ihrer Anwendung weiterverteilt werden. Nach der Dokumentation sind die grundlegenden Bibliotheken:

  • Qt

    • QT5CORE.DLL – The QtCore runtime
    • QT5GUI.DLL – The QtGui runtime
    • T5WIDGETS.DLL – The QtWidgets runtime
  • VC++ 14.0 (2015)

    • VCCORLIB140.DLL, VCRUNTIME140D.DLL – The C runtime
    • MSVCP140.DLL – The C++ runtime
  • MinGW

    • LIBWINPTHREAD-1.DLL
    • LIBGCC_S_DW2-1.DLL
    • LIBSTDC++-6.DLL

Um jedoch sicher zu gehen, dass Sie nichts übersehen haben, empfehlen wir Ihnen, dem Rat der Qt-Dokumente zu folgen und den Dependency Walker zu verwenden. Nachdem Sie es ausgeführt haben, können Sie leicht sehen, welche Abhängigkeiten noch fehlen.

 

In diesem Fall fehlen die LIBGCC_S_SEH-1.DLL und LIBSTDC++-6.DLL. Sie finden sie im Qt-Ordner innerhalb des Kit-Verzeichnisses:

 

Kopieren Sie sie einfach in das Verzeichnis Ihrer Paketdateien. Bevor Sie die Vorbereitungen für die Bereitstellung abschließen, sollten Sie die .exe-Datei ausführen, um eine gute Übung zu erhalten. Auf diese Weise stellen Sie sicher, dass alle Abhängigkeiten für die Anwendung vorhanden sind. Derzeit kann die Anwendung noch nicht ausgeführt werden. Wir haben das Kopieren von LIBWINPTHREAD-1.DLL absichtlich übersprungen, um zu zeigen, dass es wichtig ist, zu prüfen, ob alles in Ordnung ist, bevor Sie diesen Schritt beenden. Um diesen Schritt zu beenden, kopieren Sie einfach LIBWINPTHREAD-1.DLL aus dem Kit-Verzeichnis und Ihr Paket sollte bereit für die Verteilung sein!

Beachten Sie, dass die oben erwähnten DLL-Dateien je nach verwendetem Compiler unterschiedlich sein können. Vergessen Sie auch nicht, die Schritte 4 bis 7 für alle von Ihnen erstellten Pakete durchzuführen: In diesem Fall haben wir alles für das 32-Bit-Paket wiederholt.

 

7. Installationsprogramm generieren

Wenn alle Pakete für die Bereitstellung vorbereitet sind, können Sie schließlich ein Installationsprogramm erstellen. Dazu wird das Werkzeug „binarycreator“ aus dem Qt Installer Framework benötigt.

Öffnen Sie zunächst das Terminal im Bereitstellungsordner.

 

Starten Sie nun binarycreator.exe mit dem folgenden Befehl:

 

[Qt folder]\Tools\QtInstallerFramework\[QtInstallerVersion]\bin\binarycreator.exe -c config/config.xml -p packages -f NAMEOFTHEINSTALLER

Das Flag -c teilt binarycreator mit, wo die Konfigurationsdatei zu suchen ist, das Flag -p informiert darüber, wo sich die Pakete befinden, während -f binarycreator anzeigt, dass Sie einen Offline-Installer erstellen. Um mehr über die verfügbaren Flags zu erfahren, schauen Sie in die Dokumentation.

Im Fall des Tutorials sieht der vollständige Befehl wie folgt aus:

 

C:\Qt\Tools\QtInstallerFramework\4.0\bin\binarycreator.exe -c config/config.xml -p packages -f QtInstallerTutorial

Machen Sie sich keine Sorgen, nachdem Sie die Eingabetaste gedrückt haben – Ihr Terminal ist nicht eingefroren. Der Installer-Generator kann einige Zeit brauchen, um seine Arbeit zu beenden. Nach einer Weile sollte ein neuer Installer in Ihrem Bereitstellungsverzeichnis erscheinen:

 

Das funktionsfähige Installationsprogramm sollte wie folgt aussehen:

 

Beachten Sie, dass die Sprache des Installationsprogramms automatisch in die Systemsprache – in diesem Fall Polnisch – geändert wurde.

Herzlichen Glückwunsch – Sie haben Ihr erstes Installationsprogramm erstellt! Testen Sie ihn und vergewissern Sie sich, dass alles richtig eingerichtet wurde. Das auf diese Weise erstellte Installationsprogramm kann direkt an den Endbenutzer weitergegeben werden. Das Einzige, was der Benutzer tun muss, ist, ihn zu starten und den Anweisungen zu folgen.

Es ist auch erwähnenswert, dass nach der Installation einer App mit Ihrem neuen Installer das Wartungstool für Ihre App automatisch bereitgestellt wird. Es ermöglicht den Benutzern, Pakete hinzuzufügen oder zu löschen, die App zu aktualisieren (wenn Sie Repositories eingerichtet haben) oder die gesamte App zu deinstallieren.

 

Andere Zwecke

Eine gute Anwendung für den Installer-Generator ist definitiv die Verwendung mit dem CI/CD-System für Ihr Repository. Damit können Sie den gesamten Prozess automatisieren, so dass der Kunde immer die neueste Version des Installers hat. Jedes Mal, wenn Sie Änderungen in das Master-Repository einbringen, werden die entsprechenden Befehle ausgeführt, ohne dass Sie etwas manuell tun müssen.

Eine weitere interessante Tatsache ist, dass mit der neuesten Version des Qt Installer Framework 4.0 ein neues CLI hinzugefügt wurde, mit dem Sie einige interessante Dinge tun können. Die Hauptfunktionalität, die es bietet, ist die Interaktion mit Installations- und Wartungstools: Installation, Aktualisierung und Änderung der Anwendung über Befehlszeilen.

Das kann in Fällen wie der automatischen Aktualisierung sehr nützlich sein – Ihre Anwendung kann einfach ein Wartungstool ausführen, wenn sie von der API die Information erhält, dass die neue Version verfügbar ist, oder sogar direkt vom Wartungstool nach Aktualisierungen suchen. Sie können auch Funktionen wie den Uninstaller aus der App heraus aufrufen. Wenn Sie mehr darüber erfahren möchten, sehen Sie sich die CLI-Dokumentationsseite an.

 

Zusammenfassung

Das ist alles für diesen Eintrag. Jetzt wissen Sie, wie Sie mit dem Qt Installer Framework einen Offline-Installer für die Windows Qt-Anwendung erstellen können. Schauen Sie sich auch andere Einträge im Scythe-Studio-Blog an und folgen Sie unserem LinkedIn-Profil, damit Sie keine weiteren Qt-Tutorials verpassen.

 

Scythe-Studio - Blog Redactors

Scythe Studio Blog Redactors

Brauchen Sie Qt QML-Entwicklungsdienste?

service partner

Kommen wir zur Sache: Es ist eine Herausforderung, Top-Qt-QML-Entwickler zu finden. Helfen Sie sich selbst und starten Sie die Zusammenarbeit mit Scythe Studio – echten Experten im Qt C++ Framework.

Entdecken Sie unsere Fähigkeiten!

Neueste Artikel

[ 157 ]