2014-02-06 282 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\"");