首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QProcess查询

使用QProcess查询
EN

Stack Overflow用户
提问于 2013-12-26 12:29:15
回答 1查看 725关注 0票数 2

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

代码语言:javascript
复制
    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();

产出如下:

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-26 12:50:38

这是因为使用这三行并不能给出预期的结果:

代码语言:javascript
复制
QProcess process;
process.setProcessChannelMode(QProcess::ForwardedChannels);
process.start("SC QUERY \"Service_name\" | findstr RUNNING", QIODevice::ReadWrite);

基于正式文件QProcess应该适用于管道的命令:

void::setStandardOutputProcess(QProcess*目的地) 将此进程的标准输出流管道到目标进程的标准输入。

换句话说,可以通过以下方式实现command1 | command2 shell命令:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20784869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档