進程是執行中程式的實例,包含核心物件(供系統管理)與位址空間(代碼、資料、堆疊、堆)。每個進程至少擁有一個主執行緒,主執行緒結束即進程終止。模組實例句柄 HINSTANCE 實為該模組在進程位址空間的基底位址(VC++ 預設 0x00400000),可透過 GetModuleHandle() 取得。
BOOL CreateProcess(
LPCTSTR lpApplicationName, // 模組名稱(可為 NULL)
LPTSTR lpCommandLine, // 完整命令列字串
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles, // 句柄繼承
DWORD dwCreationFlags, // 建立旗標(如 CREATE_NEW_CONSOLE)
LPVOID lpEnvironment, // 環境區塊指標
LPCTSTR lpCurrentDirectory, // 工作目錄
LPSTARTUPINFO lpStartupInfo, // 啟動資訊
LPPROCESS_INFORMATION lpProcessInformation // 輸出進程資訊
);
CString cmd = _T("C:\\Windows\\Notepad.exe");
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = {0};
if (CreateProcess(NULL, cmd.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
cmd.ReleaseBuffer();
CloseHandle(pi.hThread); // 不需要主執行緒句柄
WaitForSingleObject(pi.hProcess, INFINITE); // 等待結束
DWORD exitCode;
GetExitCodeProcess(pi.hProcess, &exitCode);
CloseHandle(pi.hProcess);
// exitCode 即子進程返回值
}
將高風險運算(如不穩定演算法、第三方外掛)放入獨立子進程,父進程僅透過管道、共享記憶體或 RPC 交換必要資料。子進程崩潰不影響主進程,實現錯誤隔離。
STARTUPINFO 設定 hStdInput/Output/Error 並啟用 STARTF_USESTDHANDLES。WaitForMultipleObjects 同時等待多個子進程,或建立專用監控執行緒。SECURITY_ATTRIBUTES 控制子進程存取權限。