【问题标题】:QProcess::startDetached() but hide console windowQProcess::startDetached() 但隐藏控制台窗口
【发布时间】:2015-11-23 15:05:46
【问题描述】:

是否可以在隐藏控制台窗口的同时使用QProcess::startDetached() 在 Windows 中运行程序? QProcess::start() 将隐藏控制台窗口,但 QProcess::startDetached() 不会,至少默认情况下不会。

我可以使用QProcess::start(),但我必须等待子程序完成,否则析构函数会强制终止它,我想在启动子进程后立即关闭我的程序。

【问题讨论】:

    标签: c++ windows qt


    【解决方案1】:

    我遇到了完全相同的问题,但无法以干净的方式解决它。我找到了 2 个选项:

    1. Hacky 方式:子类QProcess 并在启动进程后调用setProcessState(QProcess::NotRunning);。这将防止析构函数终止进程。但它依赖于QProcess 的实现细节
    2. 创建内存泄漏:在堆上动态创建QProcess,但永远不会删除它,因此永远不会调用它的析构函数

      {
          QProcess *process = new QProcess;
          process->start("taskkill", QStringList() << "/f" << "/im" << "My Service.exe");
      }
      

    【讨论】:

      【解决方案2】:

      您可以使用 Windows API 隐藏控制台。

      首先,#include &lt;windows.h&gt;

      然后拨打ShowWindow(GetConsoleWindow(), SW_HIDE);

      在分离过程中的某个地方。

      【讨论】:

        猜你喜欢
        • 2017-07-04
        • 1970-01-01
        • 1970-01-01
        • 2019-07-22
        • 2012-10-14
        • 2018-01-14
        • 2011-04-03
        • 2023-03-28
        相关资源
        最近更新 更多