在C語言中,你可以使用CreateProcess
函數(shù)來創(chuàng)建一個新的進程。這個函數(shù)是Windows API的一部分,所以你需要包含<windows.h>
頭文件來使用它。
CreateProcess
函數(shù)的原型如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // 應用程序的名稱
LPSTR lpCommandLine, // 命令行參數(shù)
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 進程屬性
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 線程屬性
BOOL bInheritHandles, // 是否繼承句柄
DWORD dwCreationFlags, // 創(chuàng)建標志
LPVOID lpEnvironment, // 環(huán)境變量
LPCTSTR lpCurrentDirectory, // 當前目錄
LPSTARTUPINFO lpStartupInfo, // 起始信息
LPPROCESS_INFORMATION lpProcessInformation // 進程信息
);
這個函數(shù)返回一個布爾值,如果創(chuàng)建進程成功,它將返回TRUE
,否則返回FALSE
。
下面是一個簡單的例子,演示了如何使用CreateProcess
函數(shù)創(chuàng)建一個新的進程并執(zhí)行一個命令:
#include <stdio.h>
#include <windows.h>
int main() {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 啟動一個新的進程,該進程將執(zhí)行 "notepad.exe"
if(!CreateProcess(
NULL, // 沒有模塊名稱(使用可執(zhí)行文件路徑作為默認值)
"notepad.exe", // 要執(zhí)行的命令行字符串
NULL, // 進程屬性
NULL, // 線程屬性
FALSE, // 不繼承句柄
0, // 無創(chuàng)建標志
NULL, // 使用父進程的環(huán)境塊
NULL, // 使用父進程的當前目錄
&si, // 起始信息
&pi) // 接收進程信息的指針
) {
printf("CreateProcess failed (%d)\n", GetLastError());
return 1;
}
// 等待進程執(zhí)行完畢
WaitForSingleObject(pi.hProcess, INFINITE);
// 關閉進程和主線程的句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
在這個例子中,我們創(chuàng)建了一個新的進程來執(zhí)行notepad.exe
程序。我們使用WaitForSingleObject
函數(shù)等待新進程執(zhí)行完畢,然后使用CloseHandle
函數(shù)關閉進程和主線程的句柄。