在C語言中,使用CreateProcess
函數創建進程時,可以通過檢查函數的返回值來處理錯誤。CreateProcess
函數返回一個BOOL
值,如果函數執行成功,返回TRUE
;否則返回FALSE
。此外,該函數還會設置一個指向DWORD
類型變量的指針dwCreationFlags
,用于接收創建進程時的錯誤代碼。
以下是一個簡單的示例,演示了如何使用CreateProcess
函數并處理可能的錯誤:
#include <stdio.h>
#include <windows.h>
int main() {
STARTUPINFOW si;
PROCESS_INFORMATION pi;
BOOL bSuccess;
// 初始化STARTUPINFO結構體
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
// 初始化PROCESS_INFORMATION結構體
ZeroMemory(&pi, sizeof(pi));
// 創建進程
bSuccess = CreateProcessW(NULL, // 使用系統默認設置
L"C:\\Windows\\System32\\notepad.exe", // 要啟動的程序的路徑
NULL, // 進程屬性
NULL, // 線程屬性
FALSE, // 不繼承句柄
0, // 無創建標志
NULL, // 使用父進程的環境塊
NULL, // 使用父進程的當前目錄
&si, // STARTUPINFO指針
&pi) // PROCESS_INFORMATION指針
;
// 檢查CreateProcess是否成功
if (!bSuccess) {
printf("CreateProcess failed (%lu).\n", GetLastError());
return 1;
}
// 等待進程執行完畢
WaitForSingleObject(pi.hProcess, INFINITE);
// 關閉進程和主線程的句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
printf("Process created successfully.\n");
return 0;
}
在這個示例中,我們首先初始化了STARTUPINFOW
和PROCESS_INFORMATION
結構體,然后調用CreateProcessW
函數創建一個新的進程。如果CreateProcess
函數返回FALSE
,我們使用GetLastError
函數獲取錯誤代碼,并輸出相應的錯誤信息。如果進程創建成功,我們等待進程執行完畢,然后關閉進程和主線程的句柄。