2012-05-01 55 views
0

該處理的方法不工作,如果我以編程方式通過用戶主目錄在Windows XP和Windows 32位系統QProcess不適用於win32系統?

下面的代碼工作正常:

QProcess process; 
process.execute("C:/DOCUME~1/pjo/myprok/tmp/APP.exe"); 

不工作代碼:

這裏我正在使用QDir獲得APP.exe的路徑:: homePath

process.execute("C:/Documents and Settings/pjo/myprok/tmp/APP.exe"); 

errorString返回「UnKnow n錯誤」

我試着用start方法也從未工作:

乙不工作代碼:

process.start("C:/Documents and Settings/pjo/myprok/tmp/APP.exe"); 

錯誤:路徑找不到

process.start("C:/DOCUME~1/pjo/myprok/tmp/APP.exe"); 

錯誤:未知錯誤

回答

1

你的問題可能造成的空間,由於報價問題路徑(C:\ Documents and Settings ...)。 注意,有用於啓動兩個重載():

void start (const QString & program, OpenMode mode = ReadWrite) 
void start (const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite) 

您使用的是第一,這需要可執行文件路徑和一個字符串中的所有指定參數時,並期望它被正確引用。沒有引用,「c:\ documents」被解釋爲可執行文件,「and」「Settings ...」等作爲參數。

第二個版本單獨使用參數,並且將正確解釋可執行文件路徑,而不需要任何引用。因此,最簡單的方法是使用

process.start("C:/Documents and Settings/pjo/myprok/tmp/APP.exe", QStringList()); 

這確保了要使用的第二個版本,並且應該可以幫助您避免所有引用問題。 我建議總是使用那個過載。

這同樣適用於execute(),也就是說,如前所述,靜態方法,所以QProcess對象的錯誤代碼不會被設置。

+0

啊,你是第一個閱讀文檔的人:) – 2012-05-02 18:16:58

2

execute()是一個靜態函數,所以它應該像這樣調用:

QProcess::execute("C:/Documents and Settings/pjo/myprok/tmp/APP.exe"); 

你是說你的主目錄編程,但你展示的代碼沒有做到這一點。也許你正在創建這樣的路徑:目錄和文件名之間

QProcess::execute(QDir::homePath() + "APP.exe"); 

,然後路徑將錯過/像這樣:

"C:/Documents and Settings/pjo/myprok/tmpAPP.exe" 
+0

謝謝@roku,你是對的。 –

相關問題