我想从具有特定 PATH 集的 Qt 应用程序启动 cmd.exe。我在 QProcessEnvironment 中插入“路径”并将该环境设置为 QProcess。然后我开始分离“cmd”。在命令提示符下,路径与调用应用程序的路径相同,而不是我刚刚设置的路径。我错过了什么?我在 Windows 8.1.s 上使用带有 mingw 和 Qt-creator 3.0.0 的 Qt 5.2.0
QProcess process(this);
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("Path", "MyPath");
process.setProcessEnvironment(env);
QStringList args;
args << "/D" << "/K" << "dir";
process.startDetached("cmd", args);
最佳答案
startDetached
方法是一个静态方法。因此,您应用于 process
对象的所有状态都将被忽略,因为该方法看不到它。如果您改为使用 start()
启动进程,新进程将选择您的环境。
process.start("cmd", args);
当然,您希望分离新进程,以便父进程可以终止而不会强制新进程也终止。据我所知,QProcess
类没有为您提供轻松实现该目标的方法。您可以修改父进程的环境,以便新进程继承这些修改,但这听起来一点都不可取。
这个问题提供了一个可能的解决方法:Detaching a started process .
关于c++ - 使用 QProcessEnvironment 更改 cmd.exe 的 PATH 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184986/