使用 qprocess 运行.exe
run .exe using 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);
}
尝试proc->kill();
而不是proc->terminate();
根据该文件,terminate()
尝试终止进程,但可能不会退出进程。
这取决于.exe文件如何处理terminate()
发送的信号。
此外,我认为proc->waitForFinished();
在您的代码中是多余的。它等待进程完成,而不是告诉进程终止。
相关文章:
- 在Windows中以.exe的形式运行c++
- 获取当前正在运行的 exe 名称(不是路径)
- 使用参数在 C# 的C++上运行.exe
- 父进程意外被子 cmd 杀死.exe运行 java jar 的进程 - WINDOWS 7 问题 - C++
- 在 Linux 上没有 /proc/self/exe 的 C/C++ 运行时可执行文件的大小?
- 从 c++ 运行 MsiExec.exe?窗户
- C++程序编译器在使用g++命令编译后自动运行exe文件
- 如何将我的程序转换为.dll文件并使用rundll32.exe在cmd中运行它?
- 在位置上运行具有依赖项的.exe文件
- 将简单的 exe 运行到运行 Microsoft/WindowsServerCore 的 docker 容器中
- 程序'main.exe'运行失败:指定的可执行文件不是此操作系统平台的有效应用程序
- 没有一个Inspect.exe,magnify.exe,nardator.exe运行
- 从另一个 exe 运行 Exe
- 更准确的计时器,用于测量来自 Python 的外部.exe运行时
- OpenCV构建正常,调试抛出错误,从.exe运行良好
- Qt Creator+OpenCV:程序从.exe运行,但不从编辑器运行
- 我可以从带有参数的exe运行DLL吗?
- 在IDE中运行程序和通过.exe运行程序之间有重要的区别吗?
- 是否可以在setup.exe运行时创建环境变量
- exe运行后停止工作