我应该检查一下服务是否是RUNNING。当涉及到执行以下查询时,我遇到了QProcess查询执行方面的问题:SC QUERY "service name" | findstr RUNNING,尽管在SC QUERY "service name" | findstr RUNNING中直接在命令行中执行时工作得很好。这里的代码片段如下:
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();产出如下:

你能帮帮我吗?
发布于 2013-12-26 12:50:38
这是因为使用这三行并不能给出预期的结果:
QProcess process;
process.setProcessChannelMode(QProcess::ForwardedChannels);
process.start("SC QUERY \"Service_name\" | findstr RUNNING", QIODevice::ReadWrite);基于正式文件,QProcess应该适用于管道的命令:
void::setStandardOutputProcess(QProcess*目的地) 将此进程的标准输出流管道到目标进程的标准输入。
换句话说,可以通过以下方式实现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;https://stackoverflow.com/questions/20784869
复制相似问题