【问题标题】:QProcess: Destroyed while process (Web Browser) is still runningQProcess:进程(Web 浏览器)仍在运行时被销毁
【发布时间】:2020-11-12 20:55:05
【问题描述】:

是否可以在使用 Qpr​​ocess 启动后关闭外部浏览器中的窗口或选项卡?

我尝试了以下(例如):

#include <QCoreApplication>
#include "QProcess"
#include "QThread"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess process;
    process.start("C:/Program Files/Google/Chrome/Application/Chrome.exe", QStringList() << "google.com");
    QThread::msleep(1000);
    process.kill();
    process.waitForFinished();

    return a.exec();
}

但是进程没有关闭。

那么,这是不可能的还是有解决方法?谢谢。

【问题讨论】:

  • 调用 kill() 只对正在运行的进程有意义,所以这不是问题。问题可能是您的进程实例超出范围,因此破坏了 QProcess 的实例。尝试使用QProcess *process = new QProcess();
  • 好吧,它没有用。
  • 请编辑您的问题以提供可用于重现问题的minimal reproducible example。您可能还想尝试在process.kill() 调用之后立即调用process.waitForFinished()
  • 我提供了一个最小的例子,process.waitForFinished() 没有改变任何东西。

标签: qt browser kill-process qprocess


【解决方案1】:

这不是最好的解决方案,但我在这里:

QProcess::execute("taskkill", QStringList() << "/IM" << "chrome.exe" << "/F");

它仅适用于 Windows 系统并关闭所有浏览器窗口,但这是我已经达到并将暂时使用的唯一解决方案。

【讨论】: