Qt4には、新しく生成されたプロセスの環境変数を設定するためのQProcess :: setProcessEnvironment()があります。
ただし、QProcess :: startDetached()は静的メンバー関数であるため、setProcessEnvironment()は適用されません。Qtでデタッチされたプロセスの環境変数をどのように設定しますか?
Qt4には、新しく生成されたプロセスの環境変数を設定するためのQProcess :: setProcessEnvironment()があります。
ただし、QProcess :: startDetached()は静的メンバー関数であるため、setProcessEnvironment()は適用されません。Qtでデタッチされたプロセスの環境変数をどのように設定しますか?
これは既知の古いバグです:http://bugreports.qt-project.org/browse/QTBUG-2284。startDetached独自の環境をサポートするには、関数をオーバーロードする必要があります。Qtソースを見て、その方法を確認してください:http ://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io?h=5.5 (qprocess*ファイル)。
この動作はで修正されましたQt 5.10.0。ただし、呼び出しの順序は重要なようです。次の例が機能します。
QProcess proc;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("var-name", "var-value");
proc.setProgram("program-path");
proc.setProcessEnvironment(env);
proc.startDetached();
これは機能しませんが:
QProcess proc;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("var-name", "var-value");
proc.setProcessEnvironment(env);
proc.startDetached("program-path");
今Qt5.5を使用して、この問題に遭遇します。
Win7の下で、以下のコードを使用、親プロセスで環境を設定、サブプロセスが環境を継承しているようです。確かではありませんが、私の場合はうまくいきました。
より良い解決策があることを願っています
QString oldPath = qgetenv( "Path" );
QByteArray newPath = ( QCoreApplication::applicationDirPath() + ";" + oldPath ).toLocal8Bit();
bool bSet = qputenv("Path", newPath);
if ( !bSet )
{
qDebug()<<"Failed";
}