Я должен проверить, является ли услуга 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();
Выход:
Вы можете мне помочь?
Это потому, что использование этих трех строк не даст вам ожидаемых результатов:
QProcess process;
process.setProcessChannelMode(QProcess::ForwardedChannels);
process.start("SC QUERY \"Service_name\" | findstr RUNNING", QIODevice::ReadWrite);
На основе официальная документация, QProcess
должен работать для команд pipe’d:
void QProcess :: setStandardOutputProcess (QProcess * destination)
Передает стандартный поток вывода этого процесса к стандартному вводу процесса назначения.
Другими словами, command1 | command2
Командная команда оболочки может быть достигнута следующим образом:
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;
Других решений пока нет …