Set Umgebungsvariablen für startDetached () QProcess
-
27-09-2019 - |
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?
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");