gpt4 book ai didi

c++ - 使用 QProcess 查询

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:00 24 4
gpt4 key购买 nike

我应该检查服务是否RUNNING。我在执行以下查询时遇到了 QProcess 查询执行问题:SC QUERY "service name"| findstr RUNNING,尽管在​​ Windows 的命令行中直接执行时效果很好。这里的代码片段如下:

    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();

输出是:enter image description here

你能帮帮我吗?

最佳答案

这是因为使用这三行不会给你预期的结果:

QProcess process;
process.setProcessChannelMode(QProcess::ForwardedChannels);
process.start("SC QUERY \"Service_name\" | findstr RUNNING", QIODevice::ReadWrite);

基于official documentationQProcess 应该适用于管道命令:

void QProcess::setStandardOutputProcess(QProcess * destination)

Pipes the standard output stream of this process to the destination process' standard input.

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

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;

关于c++ - 使用 QProcess 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20784869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com