QT dlls aus einem Unterordner laden

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
Rocketbuehler
Beiträge: 14
Registriert: 19. März 2008 20:22

QT dlls aus einem Unterordner laden

Beitrag von Rocketbuehler » 11. Oktober 2013 18:16

Hallo zusammen,

vielleicht kann mir hier jemand Helfen.
Ich habe mehrere kleine Tools mit QT geschrieben. Jetzt möchte ich nicht bei jedem Tool die qt dlls in den gleichen Ordner legen. (Es ist leider auch nicht möglich alle Tools in einen Ordner zu legen.) Ich habe mir einen Ordner erstellt in dem ich die QT dlls hinein kopiert habe. Mit einer Verknüpfung starte ich dann die einzelnen Tool und verwende in der Verknüpfung das "Ausführen in" auf den Dll Ordner. Mein Problem ist das auf einem Pc dies funktioniert und auf einem anderen PC nicht. Ich erstelle jedes Mal die Verknüpfungen neu.
Kennt sich hier jemand mit dem Thema aus? Ich habe mir auch schon gedacht, ob es in der Regestry einen Eintrag gibt in der die Zeit für dlls laden eingestellt werden kann.


Viele Grüße Rocketbuehler

RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: QT dlls aus einem Unterordner laden

Beitrag von RHBaum » 11. November 2013 17:26

dlls also sprechen wir von windows.

die qt dlls werden ueber die libs geladen (importlibs),
die implementieren das ueber nen globalen laufzeit mechanismuss, der das loadlibrary (ohne kompletten pfad) aufruft bevor du in die "main" kommst.
DU hasst also keine chance, in deinem Programm was die qt verwendet, zu agieren. Das Thema muss also vor dem start der exe abgehakt werden.

Nun sind wir bei windows.und wie man das laden der dlls beeinflussen kann.
Dazu musst wissen Wo und in welcher reihefolge er dlls ohne pfad sucht.
da haben wir:
- neben dem binary(.exe)
- aktuelle Verzeichnis (mit Ausnahmen !)
- Pfad (system variable: Path, mit Ausnahmen !)
- Windows systemverzeichnisse (system, system32, winsxs .. und co).

Die Ausnahmen sind sicherheits Features. Wenn da wer in der Policies was umstrikt, hasst du nur die chance neben der exe oder systemverzeichnisse ... in diesem Modus geht aber eh ned viel bei windows :-)

Also gennerell kommst du nur über die Systemeinstellung drauf, und das musst mit dem prozess vorher machen (command shell / loader schreiben, der die ENV entsprechend modifiziert und deine exes dann startet).

Ciao ...

dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: QT dlls aus einem Unterordner laden

Beitrag von dazedly » 11. November 2013 19:07

Du könntest ein Startskript schreiben, in dem du den Pfad vorm ausführen setzt.

Rocketbuehler
Beiträge: 14
Registriert: 19. März 2008 20:22

Re: QT dlls aus einem Unterordner laden

Beitrag von Rocketbuehler » 13. November 2013 15:09

Danke für eure Antworten.

@ RHBaum: Kann ich nicht in der Registry die suchreihenfolge ändern? Das komische ist ja, dass es

@ dazedly: Was für ein Script meinst du?

dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: QT dlls aus einem Unterordner laden

Beitrag von dazedly » 13. November 2013 16:07

Code: Alles auswählen

SET PATH=%PATH%;%CD%\unterordner
programm.exe
Anpassen, in einer ".bat" Datei speichern und in den Ordner der exe legen. Ich konnte es nicht ausprobieren, aber ich denke so würde es gehen.

Wenn das Verzeichnis ein darunter liegt, kannst du euch mit zwei Punkten zurück gehen.

Code: Alles auswählen

SET PATH=%PATH%;%CD%\..\unterordner

Rocketbuehler
Beiträge: 14
Registriert: 19. März 2008 20:22

Re: QT dlls aus einem Unterordner laden

Beitrag von Rocketbuehler » 14. November 2013 12:22

Danke für die Hilfe.

Das mit dem Script geht komischer weise.

Es ist auch möglich über das Script in den Ordner zu wechseln in denen die QT dlls liegen und dann von dort aus die Software zu starten.

Code: Alles auswählen

cd ..\QT_DLLS
start ..\Programm1\programm.exe
Aber meine Verknüpfung funktioniert einfach nur auf einem PC :(
ich habe meine Software auf beiden PC's unter c:\tmp
in diesem Ordner sind die Unterordner:
QT_DLLS
Programm1
Programm2
Programm3

In der Verknüpfung für Programm1 steht:
Ziel: "c:\tmp\Programm1\programm.exe"
Ausführen in: "c:\tmp\QT_DLLS"

und dies Funktioniert auf einem PC und auf einem Anderen PC nicht.

Kann das mir Jemand erklären?

Danke für eure Antworten.

RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: QT dlls aus einem Unterordner laden

Beitrag von RHBaum » 20. November 2013 14:57

Ich glaub das Verhalten bei laden der Dlls aus dem "aktuellen" Verzeichniss ist nicht überall gleich.
Das kann von der WIndows Versionen und den Nutzerrechten abhaengig sein, bin mir aber nicht sicher :-)

Unter linux isses definitiv ein sicherheitsfeature, das zum bsp. binaries nicht aus dem aktuellen verzeichniss geladen werden.
Ebenso waer es sinnig, shared Objects nicht aus aktuellen verzeichnissen zu laden, zumindest sollten sie die SO's aus den Standard Lib Pfaden nicht Überdecken.
Sonst koennte man super Schadcode einschleussen.
Zum Glueck funktioniert das unter linux anders :-)

Aber unter windows kann es ein problem sein, wenn er dlls aus dem aktuellen verzeichniss laed und damit systemdlls verdeckt (Dll Injecktion)
Manchmal ist es gewollt (DX Overlays z.b.)
Manchmal isses ein Sicherheitsrisiko, besonders wenn man admin rechte hat :-)

besserer Weg:
Eine Batch erstellen!

SET PATH=%PATH%;c:\tmp\QT_DLLS
START c:\tmp\Programm1\programm.exe

damit sollte es dein Programm sicherer starten !

Ciao ...

hilefoks
Beiträge: 141
Registriert: 13. März 2008 17:09

Re: QT dlls aus einem Unterordner laden

Beitrag von hilefoks » 29. August 2014 13:50

Rocketbuehler hat geschrieben:und dies Funktioniert auf einem PC und auf einem Anderen PC nicht.

Kann das mir Jemand erklären?
Möglicherweise ist auf dem einen PC, warum auch immer, Qt auch in einem Systemverzeichnis installiert. Durchsuche beide Systeme doch mal nach qtcor*.dll und vergleiche die Ergebnisse.

Antworten