QProcess::startDetached() 不显示控制台 window
QProcess::startDetached() not show console window
我有一个 GUI 程序,可以通过单击按钮启动 cli 程序。我想看到控制台 window 并且不需要等到 cli 程序结束。所以我使用这样的代码:
QProcess::startDetached("cmd.exe");
单击按钮后我没有看到控制台 window。但是在任务管理器中查看 cmd.exe 进程。
我尝试使用 system() 命令,但它在 cli 程序结束前冻结了我的应用程序。
有什么方法可以让 window 可见吗?
这是预期的行为。至少在 Windows 中 startDetached
等同于使用 DETACHED_PROCESS
标志调用 CreateProcess
,其中新进程不继承其父进程的控制台。在其他平台上,该方法会做类似的事情是有道理的。
在这种情况下,您必须使用 AllocConsole
on the new process (be aware that you may need to redirect the streaming handles to the new console), or try to start the process in a different way (check CreateProcess
or fork
).
手动分配一个新的
顺便说一句,system
冻结您的应用程序的原因是因为它是一个同步调用,所以它不会 return 控制直到另一个进程完成。您可以尝试从单独的线程调用 system
,这样可以避免阻塞应用程序的主事件循环。
我有一个 GUI 程序,可以通过单击按钮启动 cli 程序。我想看到控制台 window 并且不需要等到 cli 程序结束。所以我使用这样的代码:
QProcess::startDetached("cmd.exe");
单击按钮后我没有看到控制台 window。但是在任务管理器中查看 cmd.exe 进程。
我尝试使用 system() 命令,但它在 cli 程序结束前冻结了我的应用程序。
有什么方法可以让 window 可见吗?
这是预期的行为。至少在 Windows 中 startDetached
等同于使用 DETACHED_PROCESS
标志调用 CreateProcess
,其中新进程不继承其父进程的控制台。在其他平台上,该方法会做类似的事情是有道理的。
在这种情况下,您必须使用 AllocConsole
on the new process (be aware that you may need to redirect the streaming handles to the new console), or try to start the process in a different way (check CreateProcess
or fork
).
顺便说一句,system
冻结您的应用程序的原因是因为它是一个同步调用,所以它不会 return 控制直到另一个进程完成。您可以尝试从单独的线程调用 system
,这样可以避免阻塞应用程序的主事件循环。