使用qprocess运行.exe

问题描述 投票:0回答:2

我想在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
2个回答
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);
}

1
投票

试试proc->kill();而不是proc->terminate();

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.