我试着运行这段代码:
QProcess process;
process.setWorkingDirectory("D:\Programs\Qt\Units\MyJavaProjects\StackExp\target");
process.setProgram("java.exe");
process.setArguments({"-jar","StackExp-1.0-SNAPSHOT.jar"});
process.start();
和CMD不会打开,也不会执行。它只显示这条消息:
QProcess: Destroyed while process ("java.exe") is still running
谁知道出了什么事?我如何在QProcess中使用cmd运行我的.jar文件?您可能在QProcess
完成之前调用它的析构函数,这会杀死文档中提到的进程。注意,析构函数在process
超出作用域时被调用。
存在不同的解:
-
等待进程完成:
waitForFinished
process.waitForFinished (-1); // -1 = no time out
-
在栈上构建
QProcess
QProcess *process = new QProcess(); ...
注意,应该在进程结束后销毁它,以避免内存泄漏。在构建过程中指定
parent
可能有助于自动管理QProcess
的生存期。 -
以分离模式启动进程:
startDetached
... process.startDetached ();
如果调用进程退出,分离的进程将不受影响地继续运行。
也可以使用
QProcess::startDetached
的静态重载。