为startDetached()QProcess设置环境变量

时间:2010-11-24 10:51:30

标签: qt qt4 environment-variables qprocess

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

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

3 个答案:

答案 0 :(得分:2)

这是一个已知的旧错误:http://bugreports.qt-project.org/browse/QTBUG-2284。您需要重载startDetached函数以支持您自己的环境。查看Qt源代码,了解如何执行此操作:http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io?h=5.5qprocess*个文件)。

答案 1 :(得分:0)

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

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

希望有更好的解决方案

ddns-update-style interim;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 10.42.0.0 netmask 255.255.255.0 {
  range 10.42.0.0.2 10.42.0.0.3;
}

答案 2 :(得分:0)

此行为已在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");