我工作的應用程序通過CreateProcess調用另一個應用程序。我在Win7 64位。被調用的應用程序是一個通過管道接收數據的控制檯。調用代碼如下所示:CreateProcess適用於某些計算機,而不適用於其他計算機。爲什麼?
STARTUPINFOA si;
PROCESS_INFORMATION pi;
GetStartupInfoA(&si);
memset(&si, 0, sizeof(STARTUPINFOA));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(STARTUPINFOA);
char cmdline[MAX_PATH];
sprintf(cmdline,"\"%s\" %s",AppToCallName,PipeName);
BOOL bRet = CreateProcessA(NULL,cmdline,NULL,NULL,FALSE,CREATE_NEW_CONSOLE|CREATE_BREAKAWAY_FROM_JOB,NULL,NULL,&si,&pi);
在我的電腦(我試了兩件),它的工作原理。在其他的情況下,它返回(bRet =)FALSE,然後GetLastError()返回5,這意味着ACCESS_DENIED。
我找不出問題在哪裏。不好的一點是它適用於我,所以我無法調試它!
我的設置是:
Win7的臨64位SP1
VStudio 2005 SP1
(編譯器用於:英特爾C++ 9.1
我將很高興提供更多的設置信息,如果你需要它!
有什麼想法?
什麼類型的應用程序觸發ACCESS_DENIED?在這些情況下,命令行上有什麼?另外,你是否以高級用戶身份運行代碼?我會建議不要這樣做,因爲如果你這樣做,你就不會發現這個錯誤... –
觸發ACCESS_DENIED的應用程序是一個簡單的控制檯應用程序,它將(將)通過命名管道從調用應用程序接收數據。管道創建是正確的。命令行如下所示:「\」MyConsoleApp.exe \「ThePipeName」調用者和被調用的應用程序位於同一個目錄中。 –
另外,我們在這裏都有管理員權限。即使那些無法在那裏運行我的應用程序的電腦。 –