Запрос с QProcess

Я должен проверить, является ли услуга 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();

Выход: введите описание изображения здесь

Вы можете мне помочь?

2

Решение

Это потому, что использование этих трех строк не даст вам ожидаемых результатов:

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;
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector