我有一點點混亂,由於從CreateProcess()
和GetLastError()
衝突的返回值。當我以類似於以下的方式使用CreateProcess()
時,它成功並似乎完成了其所需的任務。然而,GetLastError()
仍然返回訪問被拒絕。CreateProcess的成功,但GetLastError()返回訪問被拒絕
如果訪問被拒絕,爲什麼它似乎完成任務。相反,如果CreateProcess()
成功,爲什麼GetLastError()
返回訪問被拒絕?
或者是我使用GetLastError()
不正確?我是否應該在CreateProcess()
返回失敗值時使用它? (我對以下行爲的理由是我認爲最好是安全而不是遺憾)
SetLastError(0);
hello = CreateProcess(_T("C:\\Windows\\System32\\cmd.exe"),
_T("C:\\Windows\\System32\\cmd.exe /C ant debug"),
NULL,NULL,false,0,NULL,
_T("C:\\My\\Directory"),&siStartupInfo, &piProcessInfo);
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ALLOCATE_BUFFER
|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&errorText, 0, NULL);
AfxMessageBox(errorText);
這種行爲是否正常?在CreateProcess()
文檔中,當CreateProcess()
失敗時,它提到使用GetLastError()
,但它沒有提到相反的內容。不批評文件,只是想澄清一下。
這發生在CreateProcess()
第二參數是否NULL
與否。也許它與cmd.exe
權限有關?如果是這樣的話,不應該CreateProcess()
失敗?謝謝。
是的,你GetLastError'的'使用是不正確的錯誤。你應該只在'CreateProcess'失敗時使用它。 'CreateProcess'可能(並且確實)使用可以設置最後一個錯誤的API,並且它沒有義務將它重置爲0,因爲它返回一個表示成功的值。 – Erik
謝謝你的迴應。我只是將它重置爲零,以表明它不能來自CreateProcess()之前的函數() – JHowzer