c++ - 使用 qprocess 运行 .exe

标签 c++ qt qprocess

我想在 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并没有终止,怎么办?

最佳答案

在 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);
}

关于c++ - 使用 qprocess 运行 .exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55445829/

相关文章:

c++ - 使用 QQmlContext::setContextObject 使 C++ 对象对 QML 可见

c++ - QProcess 没有启动

c++ - 哈希类哈希

c++ - 范围限制资源管理 (SBRM) 是什么意思?

c++ - 分析波头

c++ - 线程中的 QTcpSocket 并不总是立即发送数据

c++ - 构造函数设置?

c++ - 识别 boost::shared_ptr<boost::thread> 中的对象

python - Pyside:多个 QProcess 输出到 TextEdit

c++ - QProcess 在程序文件中不起作用