在進程A中用ShellExecute方法啓動另一個進程B時,發現啓動B的運行結果與雙擊B的運行結果不同。仔細查了一下,發現是因爲把工作目錄參數lpDirectory給設置成NULL了。這個參數設置成NULL之後,新啓動的進程B的工作目錄就會使用A的工作目錄,所以會出現和雙擊運行結果不同的問題。把這個參數設置爲進程B的工作目錄後,結果就和雙擊一樣了。
後面測試了一下CreateProcess,也是需要這樣設置的。
//1、使用方法ShellExecute啓動進程
//exePath爲可執行程序路徑。folderPath爲可執行程序所在的工作目錄。
HINSTANCE ret = ShellExecute(NULL, "open", exePath, NULL, folderPath, SW_SHOWNORMAL);
if (32>=(int)ret)
return 0;
//2、使用方法CreateProcess啓動進程
//進程創建信息,由系統創建完進程後寫入(必備參數)
PROCESS_INFORMATION procInfo;
//進程初始化信息(必備參數)
STARTUPINFO startInfo;
ZeroMemory( &startInfo, sizeof(startInfo) );
startInfo.cb = sizeof(startInfo);
startInfo.dwFlags = STARTF_USESHOWWINDOW;
startInfo.wShowWindow = SW_SHOW;
//可選參數,進程安全屬性
SECURITY_ATTRIBUTES processAtt, threadAtt;
processAtt.nLength = sizeof(processAtt);
processAtt.lpSecurityDescriptor = NULL;
processAtt.bInheritHandle = true;
threadAtt.nLength = sizeof(threadAtt);
threadAtt.lpSecurityDescriptor = NULL;
threadAtt.bInheritHandle = true;
//創建進程
//exePath爲可執行程序路徑。folderPath爲可執行程序所在的工作目錄。
return ::CreateProcess( NULL , (LPSTR)exePath, &processAtt, &threadAtt, FALSE,
CREATE_NEW_CONSOLE, NULL, folderPath, &startInfo ,&procInfo );