【发布时间】:2015-11-23 15:05:46
【问题描述】:
是否可以在隐藏控制台窗口的同时使用QProcess::startDetached() 在 Windows 中运行程序? QProcess::start() 将隐藏控制台窗口,但 QProcess::startDetached() 不会,至少默认情况下不会。
我可以使用QProcess::start(),但我必须等待子程序完成,否则析构函数会强制终止它,我想在启动子进程后立即关闭我的程序。
【问题讨论】:
是否可以在隐藏控制台窗口的同时使用QProcess::startDetached() 在 Windows 中运行程序? QProcess::start() 将隐藏控制台窗口,但 QProcess::startDetached() 不会,至少默认情况下不会。
我可以使用QProcess::start(),但我必须等待子程序完成,否则析构函数会强制终止它,我想在启动子进程后立即关闭我的程序。
【问题讨论】:
我遇到了完全相同的问题,但无法以干净的方式解决它。我找到了 2 个选项:
QProcess 并在启动进程后调用setProcessState(QProcess::NotRunning);。这将防止析构函数终止进程。但它依赖于QProcess 的实现细节
创建内存泄漏:在堆上动态创建QProcess,但永远不会删除它,因此永远不会调用它的析构函数
{
QProcess *process = new QProcess;
process->start("taskkill", QStringList() << "/f" << "/im" << "My Service.exe");
}
【讨论】:
您可以使用 Windows API 隐藏控制台。
首先,#include <windows.h>。
然后拨打ShowWindow(GetConsoleWindow(), SW_HIDE);
在分离过程中的某个地方。
【讨论】: