如何使用QProcess::execute()终止进程?调用taskkill报参数错误怎么解决
问题原因
QProcess执行外部命令时,要求传入QStringList的每个元素对应单个独立参数项,不能将参数开关和对应的参数值合并在同一个字符串内。你当前的写法将/IM开关和进程名testApp.exe拼接为"/IM testApp.exe"作为单个参数传入,taskkill解析时会将整个字符串识别为一个不存在的非法参数,因此抛出报错。
修复方案
将/IM和testApp.exe拆分为两个独立的元素加入参数列表即可,参数顺序不影响taskkill的执行逻辑,两种写法都可正常运行:
// 写法1:参数顺序和注释标注的一致 QStringList args; args << "/IM" << "testApp.exe"; args << "/F"; QProcess::execute("taskkill", args);
// 写法2:保持/F前置的原有顺序 QStringList args; args << "/F"; args << "/IM" << "testApp.exe"; QProcess::execute("taskkill", args);
补充说明:这个参数拆分规则是QProcess的通用规范,它会自动处理带空格的参数的转义逻辑,手动拼接开关和参数值反而会破坏命令的解析规则,调用任意外部命令时都需要遵守该规则。
内容的提问来源于stack exchange,提问作者PietR26
相关产品推荐
相关产品推荐

