我应该检查服务是否为RUNNING
。我遇到QProcess
查询执行问题,执行以下查询时遇到问题:SC QUERY "service name" | findstr RUNNING
,虽然在Windows中直接在命令行中执行时可以正常工作。代码snipet如下:
QProcess process;
process.setProcessChannelMode(QProcess::ForwardedChannels);
process.start("SC QUERY \"Service_name\" | findstr RUNNING", QIODevice::ReadWrite);
// Wait for it to start
if(!process.waitForStarted())
return 0;
QByteArray buffer;
while(process.waitForFinished())
buffer.append(process.readAll());
qDebug() << buffer.data();
输出为:
答案 0 :(得分:2)
这是因为使用这三行不会给你预期的结果:
QProcess process;
process.setProcessChannelMode(QProcess::ForwardedChannels);
process.start("SC QUERY \"Service_name\" | findstr RUNNING", QIODevice::ReadWrite);
基于official documentation,QProcess
应该适用于管道命令:
void QProcess :: setStandardOutputProcess(QProcess * destination)
将此流程的标准输出流管道传输到目标流程的标准输入。
换句话说,command1 | command2
shell命令命令可以通过以下方式实现:
QProcess process1;
QProcess process2;
process1.setStandardOutputProcess(&process2);
process1.start("SC QUERY \"Service_name\"");
process2.start("findstr RUNNING");
process2.setProcessChannelMode(QProcess::ForwardedChannels);
// Wait for it to start
if(!process1.waitForStarted())
return 0;
bool retval = false;
QByteArray buffer;
while ((retval = process2.waitForFinished()));
buffer.append(process2.readAll());
if (!retval) {
qDebug() << "Process 2 error:" << process2.errorString();
return 1;
}
qDebug() << "Buffer data" << buffer;