c++ - 使用 QProcessEnvironment 更改 cmd.exe 的 PATH 环境变量

标签 c++ windows qt cmd qprocess

我想从具有特定 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/

相关文章:

c++ - 调用 sqlite3_step() 时从 sqlite3_stmt 获取值

php - OCI8 + PHP7.1 + Windows10 : The specified module could not be found

C# Hook Windows 进程以检查调试进程

Qt Mac (Re)move "Special Characters..."编辑菜单中的操作

c++ - C++/Qt 应用程序中的 PySide DLL 加载冲突

c++ - MySql - QSqlError 未被捕获

c++ - 如何让编译器根据版本跳过一个函数?

c++ - C++ std::thread callable 的对象指针可以在线程开始执行后失效吗?

windows - 如何安排任务在关闭窗口时运行

c++ - std::move(std::array) g++ 与 visual-c++