常見錯誤包括未指定的路徑的可執行作爲第一個參數給CreateProcess,而不是引述路徑的可執行在第二個參數
CreateProcess(<exe path goes here> , <quoted exe path plus parameters goes here>, ...);
像這樣:
std::wstring executable_string(_T("c:\\program files\\myprogram\\executable.exe"));
std::wstring parameters(_T("-param1 -param2"));
wchar_t path[MAX_PATH+3];
PathCanonicalize(path, executable_string.c_str());
path[sizeof(path)/sizeof(path[0]) - 1] = _T('\0');
// Make sure that the exe is specified without quotes.
PathUnquoteSpaces(path);
const std::wstring exe = path;
// Make sure that the cmdLine specifies the path to the executable using
// quotes if necessary.
PathQuoteSpaces(path);
std::wstring cmdLine = path + std::wstring(_T(" ")) + parameters;
BOOL res = CreateProcess(
exe.c_str(),
const_cast<wchar_t *>(cmdLine.c_str()),
...);
我只是複製和修改了一些,所以上面可能會有一些錯誤,但是這個想法就在那裏。確保在第一個參數中使用沒有引號的路徑,並在第二個引號中使用路徑,你應該沒問題。
像「C:\ Program Files \ prog.exe」,而不是像「C:\ Program Files \ prog.exe」?他們是一樣的。 – rasmus
@rasmus stackoverflow過濾了兩個反斜槓。我不得不逃脫它:) –
三種可能性:1)您的代碼被破壞,2)註冊表鍵不正確,或3)文件根本不存在。沒有代碼也沒有數據,任何人都無法猜測它是什麼。 –