2014-02-06 240 views
4

我试图执行使用如何使用QProcess执行cmd命令?

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

这似乎并没有停止服务一个cmd命令。但是,如果我从开始>>运行它,它运作。

+1

尝试startDetached( “CMD”,QStringList中()<< “/ C” << “网” << “停止” << “则将MyService”);并以相同的<< “\”为MyService \“”。为了进一步调试,不使用startDetached但启动并连接到QProcess中实例的完成()和误差()信号。 –

+0

这是我TR IED'另外,QProcess :: startDetached( “cmd.exe的”,QStringList中()<< “/ C” << “网” << “停止” << “\” 为MyService \ “”);'和它不是工作 – MistyD

+0

@ MistyD:尝试没有所有额外的空间,就像弗兰克建议的那样。 –

回答

3

QProcess中:: startDetached将采取的第一个参数作为要执行的命令和以下参数,以空格分隔的,将被解释为独立的参数,以该命令。

因此,在这种情况下: -

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

功能看到CMD作为命令,并传递/ C,净,停止和 “为MyService” 作为参数到CMD。然而,除/ c之外,其他的被分别解析并且不是有效的参数。

你需要做的是用引号将“净停止\”为MyService \”把它作为一个参数,这样就会给你: -

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

另外,使用字符串列表你可以使用: -

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