QProcess::setEnvironment() - funktioniert nicht immer?

Alles rund um die Programmierung mit Qt
Antworten
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

QProcess::setEnvironment() - funktioniert nicht immer?

Beitrag 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 ;)
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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?
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag 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...
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

ja mhhhh sehe da nur als ausweg das du dir den inhalt von list in nen file schreibst.
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag von tribari »

okay das könnt ich mal machen ;)
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Jede Liste hat doch die push_front funktion oder?
Antworten