Seite 1 von 1

QProcess::setEnvironment() - funktioniert nicht immer?

Verfasst: 13. Mai 2009 12:46
von tribari
Hallo zusammen,

ich habe mal wieder ein kleines Problem, und vielleicht weiss ja hier jemand Abhilfe ;)

Ich habe eine starter.exe - welche ein anderes QT Programm im Hintergrund starten soll (nennen wir das programm mal server.exe).
Da die starter.exe auch noch weitere Programme starten soll, welche alle diverse DLLs bzw. auch die QT-DLLs benötigen, habe ich mir ein Verzeichnis für die DLLs erstellt - mit dem Namen library und dort alles was an DLLs vorhanden ist hineingepackt.

Da die Programme nun den Pfad noch nicht kennen habe ich in der QProcess Variablen von jedem Programm noch die Environment angepasst:

Beispiel starten der server.exe:

Code: Alles auswählen

    QStringList list = QProcess::systemEnvironment();
    list.replaceInStrings(QRegExp("^PATH=(.*)", Qt::CaseInsensitive), "PATH=\\1;"+m_strDLLPath);
    m_process.setEnvironment(list);
    
    m_process.setWorkingDirectory(m_strServerPath);
    m_process.start(m_strServerExecuteable);

Dies funktionierte auf meinem Rechner auch ohne Probleme - auf diversen anderen Rechnern auch...
Jedoch habe ich nun ein System auf dem dieses nicht funktioniert, und die Programme nicht gestartet werden können (bzw. sie bringen halt eine Fehlermeldung das die benötigten DLLs nicht gefunden werden können).

Woran kann es liegen, dass dies auf manchen Systemen nicht funktioniert?

Betriebssystem war auf allen Rechner Windows XP.


Danke schon einmal für die Hilfe ;)

Verfasst: 13. Mai 2009 12:52
von AuE
Warum baust net nen Installer der die DLL´s automatisch ins Systemverzeichnis kopiert? Dann bräuchtest auch nix an den Pfade verändern.

Evtl wäre es dir möglich den Fehler weiter einzugrenzen? Gib es Logdateien?

Verfasst: 13. Mai 2009 12:59
von tribari
naja ich möchte die DLLs nicht ins Systemverzeichnis kopieren, da dies ja auch evtl. Auswirkung auf andere QT-Programme haben könnte...

Logdateien habe ich leider keine... auf jeden Fall hatte ich zum testen die DLLs wieder in die ganzen Verzeichnisse hereinkopiert, und dann lief auch alles...


Auf allen anderen Rechnern ging dies auch, wenn ich die DLLs nur in meinem library Verzeichnis liegen hatte...

Verfasst: 13. Mai 2009 13:03
von AuE
ja mhhhh sehe da nur als ausweg das du dir den inhalt von list in nen file schreibst.

Verfasst: 13. Mai 2009 13:21
von tribari
okay das könnt ich mal machen ;)

Verfasst: 25. Mai 2009 10:49
von tribari
Habe das Problem lokalisiert:

der Pfad zu meinen DLLs wird nur an die Pfadvariable hintendran gehängt... ich muss meinen pfad aber nun vor die anderen setzen ;)

Nun hab ich aber gleich die nächste Frage:

Code: Alles auswählen

list.replaceInStrings(QRegExp("^PATH=(.*)", Qt::CaseInsensitive), "PATH=\\1;"+m_strDLLPath);
würde ich gerne so anpassen das der Pfad direkt an erster Stelle in den Pfadvariablen steht. Geht dies auch mit QRegExp ... ?

lg

tribari

Verfasst: 25. Mai 2009 10:52
von AuE
Jede Liste hat doch die push_front funktion oder?