Я пытаюсь выполнить CMD команду, используяКак выполнить команду cmd с помощью QProcess?
QProcess::startDetached("cmd /c net stop \"MyService\"");
Это не похоже, чтобы остановить службу. Однако, если я запустил его из start >> run, он работает.
Я пытаюсь выполнить CMD команду, используяКак выполнить команду cmd с помощью QProcess?
QProcess::startDetached("cmd /c net stop \"MyService\"");
Это не похоже, чтобы остановить службу. Однако, если я запустил его из start >> run, он работает.
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\"");
Попробуйте startDetached ("ЦМД", QStringList() << "/ с" << "чистая" << "стоп" << "MyService"), и то же самое с << "\" MyService \ ".Для дальнейшей отладки не используйте startDetached, но начинайте и подключайтесь к завершенным() и ошибкам() сигналам экземпляра QProcess. –
Вот что я tr ("cmd.exe", QStringList() << "/ c" << "net" << "stop" << "\" MyService \ ""); 'и он не работает – MistyD
@ MistyD: Попробуйте это без лишних пробелов, точно так же, как предложил Фрэнк. –