QT Deploy on Windows



  • Jede DLL hat weitere abhängige DLLs, welche im Baum durch Aufklappen per '+' angezeigt werden.

    Für dich ist aber wohl die Liste "Module" besser geeignet.
    Am besten du aktivierst per "F9" die Anzeige der "Full Paths".
    Dann scrollst du zu den QT- und MinGW32-Libs (die ganzen Einträge mit dem gelben Warnzeichen kannst du auch hier ignorieren, dies sind zum großen Teil Wrapper DLLs für .NET Assemblies) und merkst dir deren Verzeichnisse/Unterverzeichnisse: nur diese sollten dann in deinem Deploy enthalten sein.
    Ich hoffe mal, daß QT sowie MinGW32 bei der Installation keine zusätzlichen DLLs in das Windows/System32-Verzeichnis kopiert haben (sonst müßtest du diese ja auch mitausliefern).

    Vorher mußt du jedoch natürlich eine lauffähige Anwendung haben (sonst macht es ja keinen Sinn diese auszuliefern).
    Mit welcher IDE entwickelst du denn?



  • Für Qt gibt es ein tool welches das ganze vereinfacht:
    https://doc.qt.io/qt-5/windows-deployment.html



  • @Th69 ich schaue gleich morgen früh

    @firefly das habe ich doch verwendet 😃



  • Ich entwickle mit QtCreator. Zumindest wenn ich GUI-Anwendungen mache. Wenn ich alle .dll's die ich herausfinde (mit deinen letzten Empfehlungen) mit dazu packe funktioniert es trotzdem nicht. Dann meckert erstmal Windows, dass noch welche fehlen. Wenn ich die noch dazu packe läuft es weiterhin nicht. Dann meckert Windows zwar nicht, aber es startet einfach nicht. Wenn ich daraufhin noch weitere .dll's hinzufüge die ich per try and error rausgefunden habe, startet die Anwendung immerhin auf dem Laptop. Und erst wenn ich dann noch die oben besagten drei Ordner dazugebe würde die Anwendung auch auf meinem PC laufen. Ich hänge dir die .exe einfach mal an. Mal schauen was du herausfinden kannst @Th69 .

    https://workupload.com/file/3a2LXqVA

    PS: Soviel steckt da auch nicht drin. Ist ja nur ein Test. Die main.cpp hab ich so gelassen und die main.qml beinhaltet lediglich

    import QtQuick 2.6
    import QtQuick.Controls 2.5
    import QtQuick.Window 2.2
    
    Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
        property int foo: 0
    
        Button {
            anchors.centerIn: parent
            text: "Press me"
            onClicked: {
            }
        }
    }
    


  • Ich habe weder Qt noch MinGW hier installiert, daher kann ich es auch nicht ausführen.

    Taucht der Prozess denn im TaskManager auf? Wenn ja, dann sind alle DLLs gefunden worden und die Anwendung hat (einfach nur) einen Fehler im Start-Code (und dann solltest du das auch debuggen können, d.h. einfach das Programm pausieren lassen und schauen, in welchem Code (bzw. in welcher DLL) sich das Programm aufgehängt hat).



  • Nein, der Prozess taucht nicht im Taskmanager auf. Aber ich habe es jetzt geschafft und weiß nun warum ich solche Probleme hatte. Das Problem saß natürlich wieder vor dem PC. Oben schrieb ich folgendes:

    @Zhavok sagte in QT Deploy on Windows:

    Dann habe ich "Qt 5.13.2 (MinGW 7.3.0 32-bit)" gestartet. Darin hab ich dann unter "5.13.2\mingw73_32\bin" die "windeployqt.exe" ausgeführt und als Parameter den Release Ordner angegeben.

    dumm nur, dass bei QML Projekten auch der Parameter --qmldir <directory> angegeben werden sollte 😅 . Um die enorme Menge an nutzlosen Daten loszuwerden habe ich noch mehr Argumente verwendet. Das ganze sieht aktuell bei mir so aus:

    windeployqt.exe C:\CPP\Projects\build-TempQML-Desktop_Qt_5_13_2_MinGW_32_bit-Release\release --no-translations --no-patchqt --no-virtualkeyboard --no-webkit2 --no-opengl-sw --qmldir C:\Qt\Qt5.13.2\5.13.2\mingw73_32\qml --plugindir C:\CPP\Projects\build-TempQML-Desktop_Qt_5_13_2_MinGW_32_bit-Release\release\Plugins
    

    Damit läufts. Manches davon sehe ich trotzdem als sinnlos an. Die Plugins könnte man eigentlich komplett weglassen bis auf platforms\qwindows.dll. Glaube nicht, dass ich bei diesem Projekt \audio\ ... benötige^^. Aber egal. Es funktioniert schonmal und es macht alles automatisch ohne viel Gesuche von .dll's. Damit bin ich erstmal zufrieden 🙂
    Schade ist nur etwas, dass ein einfaches Projekt mit einem Button zu 788 Dateien wird^^

    Vielen Dank für eure Hilfe und Geduld. Das hat mir wirklich weitergeholfen. Jetzt hab ich auch schonmal den DependencyWalker kennengelernt^^.



  • Eine Frage hätte ich doch mal noch. Einige .dlls bleiben trotzdem übrig die ich löschen könnte und die Anwendung immernoch funktioniert hat. Kann man davon ausgehen, dass es während der Laufzeit doch zu Problemen kommen kann weil eine .dll fehlt? Also um es besser zu formulieren: Läd die Anwendung beim Start direkt alle .dll's die sie während der Laufzeit benötigen könnte oder erst dann wenn sie benötigt wird?



  • @Zhavok sagte in QT Deploy on Windows:

    Läd die Anwendung beim Start direkt alle .dll's die sie während der Laufzeit benötigen könnte oder erst dann wenn sie benötigt wird?

    Das kommt darauf an ob statisch oder dynamisch gelinkt wird. Ich kann mir kaum vorstellen daß die Qt-Dlls sich gegenseitig zur Runtime dynamisch laden.



  • Ich linke dynamisch. Kenne mich mit den Lizenzen noch nicht so gut aus, dass ich da in kein Fettnäpfchen treten will 😅




Log in to reply