首頁  >  文章  >  後端開發  >  如何在 C 中使用 ::CreateProcess 啟動和管理 Windows 執行檔?

如何在 C 中使用 ::CreateProcess 啟動和管理 Windows 執行檔?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 13:02:29276瀏覽

How to Launch and Manage Windows Executables with ::CreateProcess in C  ?

在C 語言中呼叫::CreateProcess 來啟動和管理Windows 執行檔

本文將示範如何在C 語言中使用:CreateProcess 函數啟動Windows 執行文件,等待其完成,並正確處理其終止。

啟動執行檔

::CreateProcess 函式接受多個參數,包括執行路徑和命令列參數。若要啟動EXE,請在路徑參數中指定執行檔的路徑:

<code class="cpp">STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;

if (CreateProcess("C:\path\to\my.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
  // Executable successfully launched
} else {
  // Handle launch failure
}</code>

等待完成

要等待執行檔完成,請呼叫WaitForingleSObject 函數以processInfo.hProcess 作為等待句柄:

<code class="cpp">WaitForSingleObject(processInfo.hProcess, INFINITE);</code>

這將阻塞當前線程,直到進程退出。

處理程序終止

執行檔完成後,關閉進程和執行緒句柄以正確釋放系統資源:

<code class="cpp">CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);</code>

範例程式碼

將它們放在一起,下面的程式碼示範如何啟動一個EXE,等待其完成,並處理進程終止:

<code class="cpp">STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;

if (CreateProcess("C:\path\to\my.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
  WaitForSingleObject(processInfo.hProcess, INFINITE);
  CloseHandle(processInfo.hProcess);
  CloseHandle(processInfo.hThread);
}</code>

此程式碼將啟動指定的EXE,等待其完成,然後正確關閉所有句柄,確保適當的清理和資源重新分配。

以上是如何在 C 中使用 ::CreateProcess 啟動和管理 Windows 執行檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn