QProcess 不会终止程序

问题描述 投票:0回答:1
QProcess pro;
pro.start("Notepad");
QTimer::singleShot(3000, &pro, &QProcess::terminate);

3秒后它必须终止我的notepad.exe,但它不会我不知道问题是什么

我用 (kill) 更改了它,但仍然不起作用

c++ qt qt6 qtcore
1个回答
4
投票

根据设计(操作系统相关),运行没有完整路径的命令相当于 POSIX 中的

system
函数,并且通过其实现,它对创建的进程没有这种粒度的控制,因为在您的进程之间存在一个 shell 进程。应用程序和您想要执行的应用程序。由于
notepad.exe
是一个 GUI 应用程序,它会立即将控制权返回给 shell,然后 shell 终止,这是程序存根代码的 Windows 特定行为。出于所有目的,您的
QProcess
已经停止。

Qt 过去在 Windows 上有特殊行为,其中命令被传递到

cmd.exe
。关于运行、传递参数和终止进程的规则因程序而异,最值得注意的是
cmd.exe
本身。行为仍然因新奇的
startCommand
成员函数而异。

您必须找到 notepad.exe 的真实位置,例如通过

QStandardPaths::locate
(Qt 5.0 中引入)或要求用户配置它。

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