【问题标题】:run .exe using qprocess使用 qprocess 运行 .exe
【发布时间】:2019-03-31 21:57:39
【问题描述】:

我想在 qt 应用程序启动时打开 .exe 文件,并在 qt 应用程序关闭时终止 .exe。

QProcess *proc;

Calculator::Calculator(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Calculator)
{
    ui->setupUi(this);
    proc = new QProcess(this);
    QString fileName = "/ingredient";
    proc->start(fileName);
}

Calculator::~Calculator()
{
    delete ui;
    proc->waitForFinished();
    proc->terminate();
}

当我运行 Qt 应用程序时,.exe 正在运行。 但是关闭qt应用程序时.exe并没有终止,我该怎么办?

【问题讨论】:

    标签: c++ qt qprocess


    【解决方案1】:

    在 Windows 上,您可以使用 Windows API 来终止应用程序。请记住,Qt 会尝试杀死它,但不会确保杀死/结束它。在以下代码中,将 更改为您的应用程序的名称,如果您有足够的权限,这将关闭它。

    #include <windows.h>
    #include <process.h>
    #include <Tlhelp32.h>
    #include <winbase.h>
    #include <string.h>
    void YourClassName::killProcess()
    {
        HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
        PROCESSENTRY32 pEntry;
        pEntry.dwSize = sizeof (pEntry);
        BOOL hRes = Process32First(hSnapShot, &pEntry);
        while (hRes)
        {
            if (_wcsicmp(pEntry.szExeFile, L"<AppName>.exe") == 0) // strcmp changed to _wcsicmp
            {
                HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
                                              (DWORD) pEntry.th32ProcessID);
                if (hProcess != NULL)
                {
                    TerminateProcess(hProcess, 9);
                    CloseHandle(hProcess);
                }
            }
            hRes = Process32Next(hSnapShot, &pEntry);
        }
        CloseHandle(hSnapShot);
    }
    

    【讨论】:

      【解决方案2】:

      尝试proc-&gt;kill(); 而不是proc-&gt;terminate();

      根据documentterminate()试图终止进程,但可能不会退出进程。

      这取决于.exe文件如何处理terminate()发送的信号。

      此外,我认为proc-&gt;waitForFinished(); 在您的代码中是多余的。它等待进程完成,而不是告诉进程终止。

      【讨论】:

        猜你喜欢
        • 2016-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        相关资源
        最近更新 更多