Frage

In Qt4 gibt es QProcess :: setProcessEnvironment () zur Einstellung Env Variablen für den neu Laich Prozess.

Allerdings QProcess :: startDetached () ist eine statische Member-Funktion, so setProcessEnvironment () keine Anwendung findet. Wie funktioniert ein Satz Env Variablen für eine freistehende Prozess in Qt?

War es hilfreich?

Lösung

Es ist ein bekannter alter Fehler: http://bugreports.qt-project.org / browse / QTBUG-2284 . Sie müssen Überlastung startDetached Funktion Ihre eigene Umgebung zu unterstützen. Schauen Sie sich auf Qt Quellen zu sehen, wie das zu tun: http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io?h=5.5 (qprocess* Dateien).

Andere Tipps

Mit Qt5.5 Führen Sie nun in dieses Problem.

Unter Win7, Gebraucht Code unten, Set-Umgebung in Vater Prozess, Es scheint, dass Sub-Prozess erbt die Umwelt. Nicht sicher, aber es funktionierte in meinem Fall.

Hope gibt es bessere Lösungen

QString oldPath = qgetenv( "Path" );
QByteArray newPath = ( QCoreApplication::applicationDirPath() + ";" + oldPath ).toLocal8Bit();
bool bSet = qputenv("Path", newPath);
if ( !bSet )
{
    qDebug()<<"Failed";
}

Dieses Verhalten wurde in Qt 5.10.0 fixiert. Allerdings scheint die Reihenfolge der Anrufe wichtig. Das folgende Beispiel funktioniert :

QProcess proc;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("var-name", "var-value");
proc.setProgram("program-path");
proc.setProcessEnvironment(env);
proc.startDetached();

, während dies tut nicht Arbeit :

QProcess proc;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("var-name", "var-value");
proc.setProcessEnvironment(env);
proc.startDetached("program-path");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top