2014-02-06 2 views
4

Я пытаюсь выполнить CMD команду, используяКак выполнить команду cmd с помощью QProcess?

QProcess::startDetached("cmd /c net stop \"MyService\""); 

Это не похоже, чтобы остановить службу. Однако, если я запустил его из start >> run, он работает.

+1

Попробуйте startDetached ("ЦМД", QStringList() << "/ с" << "чистая" << "стоп" << "MyService"), и то же самое с << "\" MyService \ ".Для дальнейшей отладки не используйте startDetached, но начинайте и подключайтесь к завершенным() и ошибкам() сигналам экземпляра QProcess. –

+0

Вот что я tr ("cmd.exe", QStringList() << "/ c" << "net" << "stop" << "\" MyService \ ""); 'и он не работает – MistyD

+0

@ MistyD: Попробуйте это без лишних пробелов, точно так же, как предложил Фрэнк. –

ответ

3

QProcess :: startDetached будет принимать первый параметр в качестве команды для выполнения, а следующие параметры, разделенные пробелом, будут интерпретироваться как отдельные аргументы команды.

Таким образом, в этом случае: -

QProcess::startDetached("cmd /c net stop \"MyService\""); 

Функция видит CMD как команды и передает/с, сеть, остановить и "MyService" в качестве аргументов в CMD. Однако, кроме/c, остальные анализируются отдельно и не являются допустимыми аргументами.

Что вам нужно сделать, это использовать кавычки вокруг «чистой остановки \» MYSERVICE \», чтобы передать его в качестве единственного аргумента, так что бы дать вам: -

QProcess::startDetached("cmd /c \"net stop \"MyService\"\""); 

В качестве альтернативы, используя список строк вы можете использовать: -

QProcess::startDetached("cmd", QStringList() << "/c" << "net stop \"MyService\""); 
Смежные вопросы