溫馨提示×

c語言createprocess怎樣創(chuàng)建進程

小樊
81
2024-10-18 06:57:18
欄目: 編程語言

在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ù)關閉進程和主線程的句柄。

0