2

在 Qt4 中,有 QProcess::setProcessEnvironment() 用于为新生成的进程设置 Env 变量。

但是,QProcess::startDetached() 是静态成员函数,因此 setProcessEnvironment() 不适用。如何在 Qt 中为分离的进程设置 Env 变量?

4

3 回答 3

3

这是一个已知的旧错误: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*文件)。

于 2010-11-24T13:30:26.453 回答
1

此行为已在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");
于 2019-08-07T10:00:19.373 回答
0

现在使用Qt5.5,遇到这个问题。

Win7下,使用下面的代码,在父进程中设置环境,子进程似乎继承了环境。不确定,但它在我的情况下有效。

希望有更好的解决方案

QString oldPath = qgetenv( "Path" );
QByteArray newPath = ( QCoreApplication::applicationDirPath() + ";" + oldPath ).toLocal8Bit();
bool bSet = qputenv("Path", newPath);
if ( !bSet )
{
    qDebug()<<"Failed";
}
于 2015-10-13T07:14:00.797 回答