在 Qt4 中,有 QProcess::setProcessEnvironment() 用于为新生成的进程设置 Env 变量。
但是,QProcess::startDetached() 是静态成员函数,因此 setProcessEnvironment() 不适用。如何在 Qt 中为分离的进程设置 Env 变量?
在 Qt4 中,有 QProcess::setProcessEnvironment() 用于为新生成的进程设置 Env 变量。
但是,QProcess::startDetached() 是静态成员函数,因此 setProcessEnvironment() 不适用。如何在 Qt 中为分离的进程设置 Env 变量?
此行为已在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";
}