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