依赖:windows下,Qtcreator;linux未测试
通过网络搜索,有两个地方需要注意;要想成功调用外部的exe,第一需要QProcess,第二需要QProcess的参数,这个参数是task 任务指令
艺术源于网络和Qt官网
1、tasklist和taskkill
- TASKLIST,显示符合条件的列表信息
- TASKKILL, 终止对应的程序
举例:
上面的都是来自windows的cmd的指令信息。
eq;相同
ne;不相同
"-“与”"效果是一样的
2、QProcess
- start
启动外部程序;当他关闭时,外部程序也会跟着关闭。
- startDetached
顾名思义,和外部分离开;关闭时,外部程序自行关闭 - execute
关闭进程 - close,关闭进程的所有通信并终止它
代码示例:
启动主要是 "command"//cmd指令
检查是否启动主要是 //process->readAllStandardOutput();
method 1: //非阻塞启动
process->startDetached("./SCMS-E.exe",QStringList()<<"command");//脱离
process->start("./test.exe",QStringList()<<"command");//依赖
method 2: //阻塞启动
process->execute("./test.exe",QStringList()<<"command");//不建议这种写法
//结束程序
process->close();
或者
process->execute("taskkill",QStringList()<<"-fi"<<"imagename eq test.exe");
//判断程序是否在运行
process->execute("tasklist", QStringList()<<"-fi"<<"imagename eq test.exe");
QString tmp= QString::fromLocal8Bit(process->readAllStandardOutput());
qDebug()<<"www"<<a;
if (!tmp.contains("test.exe",Qt::CaseInsensitive))
{
做你的事情}
补充:waitForFinished; 最开始调用是有效的。
如果进程完成,则返回 true; 否则返回 false (如果操作超时,如果发生错误,或者如果此 QProcess 已经完成)。