Programm (NSIS) läuft nicht unter jedem Windows 7

Alles rund um die Programmierung mit Qt
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Hallo Qt-Gemeinde,

der Titel meines Themas spiegelt nur halb wieder, wo mein Problem liegt. Und zwar habe ich ein kleines Programm schreiben wollen, dass eine Datenbank benutzt. Diese habe ich mit dem SQLite Database Browser erstellt und die Anbindung im Programm, wie auch das Füllen über Dialoge klappt nach einigen Hilfestellungen hier im Forum wunderbar.
Ich wollte nun daraus eine *.exe machen und habe dafür NSIS benutzt, was es auch problemlos nach Einbinden aller DLLs tat. Ich konnte das Programm dann auf einem Rechner mit Windows 7 Home Premium 64-bit erfolgreich ausführen und habe auch die "Datenbank zu sehen bekommen" (über ein QTableView)
Versuche ich nun aber mit diesem Installer, das Programm auf einem anderen Rechner zu installieren, dann verläuft die Installation zunächst auch erfolgreich, jedoch bekommt mein QTableView keine daten, bzw. wird erst garnicht angezeigt.

Vorher:
Ich bin immer noch in den Anfängen mit Qt und mit NSIS nur sehr sehr mäßig vertraut. Ich habe mir ein Skript mehr oder weniger aus Quellen im Internet zusammengebastelt und so funktionierte es dann auch. um die erforderlichen DLLs zu finden, bin ich dann in sehr naiver weise so vorgegangen, dass ich zunächst vier Stück eingebunden hatte, die mir von einem anderen "Projekt" bekannt waren. Damit ließ sich dann schonmal der Installer generieren. Danach habe ich probiert das Programm zu starten und dann nach für nach alle DLLs eingebunden, die mir in einer Fehlermeldung noch als fehlden angezeigt wurden und so habe ich nun folgende DLLs im NSIS-Skript eingebunden:

1) libgcc_s_dw2-1.dll
2) mingwm10.dll
3) QtCore4.dll
4) QtCored4.dll
5) QtGui4.dll
6) QtGuid4.dll
7) QtSqld4.dll

zusätzlich noch natürlich die Datenbankdatei.


Da ich nicht wirklich fit bin mit NSIS, das Programm aber zwei Werte aus der Registry auslesen soll, habe ich die Schlüssel manuell und korrekt angelegt.Allerdings sollten die auch nicht viel mit dem Problem zu tun haben.


Wie gesagt, auf einem Rechner mit obigen betriebssystem funktioniert es auch so, wie es bis jetzt funktionieren soll.

Auf zwei weiteren Rechnern, einer mit Windows 7 Professional 64-bit und einmal Windows Home Premium 32-bit
kann ich zwar das Programm installieren, jedoch bekomme ich außer der Menüleiste nicht viel zu sehen. Die Datenbank bzw das QTableView wollen nicht angezeigt werden.

Da die DLLs teilweise riesig sind, lade ich den die Header- und Quelldateien, die Datenbankdatei und das NSIS-Skript hoch. ich wäre Euch sehr dankbar, wenn Ihr mir auf die Sprünge helfen könntet.

Viele Grüße,
Marcus
Dateianhänge
Datenbank.zip
(10.72 KiB) 199-mal heruntergeladen
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Was ich vllt. noch dazu sagen sollte. Versuche ich ein Release zu erstellen, dann funktioniert es nicht. Das Programm wird dann mit Rückgabewert 255 beendet. Es startet zwar ein neues Fenster, aber es wird nur eine nichtssagende Windowsmeldung gezeigt.
Urki
Beiträge: 10
Registriert: 25. Januar 2009 02:42

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Urki »

Marcus Breuer hat geschrieben: 1) libgcc_s_dw2-1.dll
2) mingwm10.dll
3) QtCore4.dll
4) QtCored4.dll
5) QtGui4.dll
6) QtGuid4.dll
7) QtSqld4.dll

zusätzlich noch natürlich die Datenbankdatei.
Hmm, den Quellcode habe ich mir jetzt noch nicht angesehen, aber dir dürte noch die qsqlite4.dll fehlen, ansonsten kannst du auch keine sqlite Datenbank öffnen. Die müsste aber in ein unterverzeichnis: sqldrivers/qsqlite4.dll. Ich hab jetzt keine Zeit mir den Quellcode genauer anzuschauen, sry.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Christian81 »

Und Debug-Libs gehören sicher auch nicht in den Installer...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Hallo Christian81,

ich habe erstmal den Fehler behoben, der mir kein Release erstellen wollte. Dazu habe ich die beiden connects, die die beiden Dialoge zur Passwortabfrage mit den SLOTS im hauptfenster verbinden in die darüber stehenden if-Abfragen geschrieben. Da schien der Hund begraben zu sein. Danach habe ich den Installer neu erstellt und dies klappte nach einfügen von QtQql4.dll dann auch. Ich werde das jetzt aber mal noch mit der von Dir genannten dll ausprobieren.
Merkwürdig finde ich nur, dass es auf einem Rechner funktioniert, auf dem nächsten leider dann nicht mehr. Daraus kann ich mir keinen Dreh machen.
Die Beispiele auf der Seite zur Referenz helfen mir leider auch nicht weiter.

Aber vielen Dank erstmal. Grüße,
Marcus
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Entschuldige Urki,

ich habe garnicht gesehen, dass der größere beitrag von Dir war. Was falsch ist, muss richtig gestellt werden:)

Grüße
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Ok, ich schreibe mal munter weiter und habe jetzt mal erste Erfahrungen mit dem Dependeny Walker gemacht. Allerdings sagt mir das nicht wirklich etwas zum jetzigen Zeitpunkt. Mir ist nur aufgefallen, dass da wohl in der Spalte CPU was zwischen 32 und 64-bit schief zu laufen scheint. Das Bild dazu ist angehangen.
Dateianhänge
depwalk.png
depwalk.png (174.41 KiB) 8060 mal betrachtet
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Hallo,

also ich habe noch das Folgende erfolglos probiert:

1) Den Ordner sqldrivers mit der qsqlite4.dll in das Installationsverzeichnis kopiert, so wie ich mit den entsprechenden Seiten und Urki's Hinweis verstanden hatte.

2) Den Pfad zu diesem Ordner in der main nach Erzeugen desQApplication-Objekts hinzugefügt mit qApp->addLibraryPath(QCoreApplication::applicationDirPath().append("\sqldrivers")); und dann wie unter 1) weitergemacht. Ebenfalls ohne Erfolg.

Ich verstehe aber auch ehrlich gesagt nicht im Geringsten, was mir der Dependency Walker da sagen möchte, da ich bisher auch keine seite gefunden habe, auch hier in der Forensuche finde ich unter Dependency Walker nur einen Beitrag, in dem das Tool nur kurz beim Namen genannt wurde. Allzu dumm bin ich denke und hoffe ich nicht, dass ich nicht mehr bisher gefunden habe.

Nochmal zum Vorgang. Auf dem Rechner, auf dem ich das Programm kompiliere und dann mit NSIS einen Installer generiere, klappt es, das Programm zu installieren und zu starten. Seltsam finde ich, dass beim ersten Start wieder keine Daten angezeigt werden. Beim zweiten Start klappt das dann wunderbar.
Auf jedem anderen Rechner mit einer Windows 7 Version macht das Programm nicht im Geringsten das, was ich will.

Ich habe im Qt Creator unter Projekt die Release Version erstellt und diese dann auch für den Installer benutzt. Die DLLs, die ich aufgeführt hatten, habe ich dann, (alle Debug DLLs) entfernt. Was auch soweit ok sein muss.
Jetzt fällt mir aber nichts mehr ein. Kann mir bitte jemand den Fingerzeig geben oder wenn es halt schneller ist auch die Lösung für mein Problem angeben?

Vielen Dank im Voraus. Grüße,
Marcus
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Christian81 »

Wenn es schon auf dem Buildrechner beim ersten Mal nicht geht dann würde ich einfach mal debuggen und ein paar Ausgaben einbauen. Z.b. ob er den SQL-Driver überhaupt findet etc.

Dein Vorgehen mit qsqlite4.dll ist korrekt. Das mit addLibraryPath ist falsch bzw. nicht nötig.
Und das ist hoffentlich nicht ernst gemeint: "\sqldrivers". C Grundlagen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Ich habe mich da vllt. nicht detailliert ausgedrückt, also es funktioniert beim ersten Mal nicht, wenn ich nach der Installation direkt aus dem Dialog des Installers das Programm öffne. Also es öffnet sich problemlos, aber es werden dann keine Datensätze angezeigt. Schließe ich den Dialog und öffne das Program entweder direkt aus dem Installationsverzeichnis oder über Windows->Start->etc funktioniert es sofort. Also wegen des SQLite Treibers habe ich mir da dann bisher keine Sorgen gemacht.
Die Verbindung, so nehme ich also an, scheint zu klappen, bzw. so denke ich, findet er den Treiber. Zumal, wenn ich es als Debug-Version erstelle, funktioniert es auch problemlos. Ich setze dann halt lediglich die Pfade zu der Datenbankdatei selbst und alles ist wunderbar. Eintragen von Datensätzen und die Suchfunktion, die bisher nicht gerade gut ist, funktioniert ebenfalls.
Oder liege ich da mit meiner Vermutung, basierend auf Obigem falsch? Gibt es noch weitere Stellen, die ich mal genauer unter die Lupe nehmen sollte?

Danke für deine Mühen. Gruß,
Marcus
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Christian81 »

Vermutungen bringen uns nicht weiter. Deubggen, Debug-Ausgaben und Verschlanken des Programms bis das Problem nicht mehr auftritt (mal wieder Stichwort 'minimal komilierbares Beispiel') sind die eizigsten Möglichkeiten. Habe ich aber schon einen Beitrag weiter oben erwähnt...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Guten Morgen,

also kompilierbar ist der Code, den ich angehangen hatte. Habe zwar etwas geändert in der Zwischenzeit, aber das macht nicht die Welt aus.

Also ich bin jetzt mal um Fehler zu finden so vorgegangen:

Nach db_00.open() in der main-Funktion habe ich folgendes ausprobiert um etwaige Fehler zu finden:

Code: Alles auswählen

 qDebug() << db_00.driver()->isOpen() << db_00.driver()->lastError().text() << db_00.lastError().text();
was mir glücklicherweise true und zwei leere Strings ausgab.

Ich habe auch einfach einmal ganz simpel gesagt(nach db_00.open()) if(db_00.open) return 1; Und das Programm wurde dann auch geschlossen.

Etwas habe ich allerdings dennoch die ganze Zeit ignoriert. Und zwar hatte ich keinen Verbindungsnamen beim Erzeugen des Database-Objekts mit angegeben, so dass halt ständig die Ausgabe
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
generiert wurde. ich habe dann einen Verbindungsnamen mit angegeben und greife dann in der Klasse Kontakt mit

Code: Alles auswählen

 QSqlDatabase db_01 = QSqlDatabase::database("Verbindung_00");
        QSqlQuery query(db_01);
wobei Verbindung_00 der gewählte Name der Verbindung in der main-Funktion ist. Jetzt passiert es aber leider, dass nicht einmal mehr nach dem zweiten Starten des Programms nach der Installation überhaupt auch nur irgendetwas angezeigt wird.
qDebug() << ... sagt mir auch nichts genaueres Bzw. es wird true für db_01.isOpen() und nichts für db_01.lastError.text() zurückgegeben.

Ich probiere mal den Rechner aus dem Fenster zu schmeißen, vllt. löst das ja das Problem:) Alleine bekomme ich es wahrscheinlich nicht gelöst. Vielen Dank für Eure Mühen.

Grüße,
Marcus
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Christian81 »

Du machst mehr als einmal ein Open() - ansonsten würde die Warnung nicht kommen... minimales Beispiel (zum x-ten)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Marcus Breuer
Beiträge: 113
Registriert: 31. März 2011 17:19
Wohnort: Aachen
Kontaktdaten:

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von Marcus Breuer »

Der Code, der weiter oben angehangen ist, lässt sich bei mir kompilieren und der ist ja leider auch so minimal, dass wenn ich da nur eine Sache weglasse, das Programm ja quasi garnichts mehr macht. Deswegen verstehe ich jetzt gerade nicht, was Du haben willst.
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Re: Programm (NSIS) läuft nicht unter jedem Windows 7

Beitrag von ScyllaIllciz »

Es wäre schön, wenn Du aktuellen Quellcode zur Verfügung stellen würdest, weil Dein Programm so auf einem anderen Rechner nicht gehen kann, siehe main.cpp (was passiert, wenn keine Settings gefunden werden?). Und danach crascht es gleich, weil entweder "nutzerEingabe" oder "nutzerPasswort" nicht initialisiert sind, Du aber ein connect machst!?!?
In diesem Zustand solltest Du erstmal versuchen, das Programm "fehlerfrei" ans laufen zu bringen, bevor Du das auf einem anderen Rechner probierst!
Antworten