簡體   English   中英

如何檢查 CreateProcess 是否正在工作或正在運行?

[英]How can I check if CreateProcess is working or running?

我使用CreateProcess來啟動我的 a.exe。 我想知道是否一切正常,或者當我嘗試啟動 this.exe 時是否遇到錯誤。

據我所知,我需要使用GetLastError() ,但我試圖在進程路徑中模擬一個錯誤,但它返回相同的最后一個錯誤代碼。

所以我想知道CreateProcess是否成功以及該過程是否完成。 我應該怎么做才能做到這一點?

謝謝。

您正在尋找的所有信息都在CreateProcess的文檔中詳細說明:

如果 function 成功,則返回值非零。

如果 function 失敗,則返回值為零。 要獲取擴展的錯誤信息,請調用GetLastError

請注意,function 在進程完成初始化之前返回。 如果找不到所需的DLL或初始化失敗,則終止進程。 要獲取進程的終止狀態,請調用GetExitCodeProcess

如果您需要等待目標進程終止,請在調用CreateProcess填寫的PROCESS_INFORMATION中返回的進程句柄上調用WaitForSingleObject

由於您控制目標進程,因此您可以自由選擇任何允許您從進程的退出代碼中確定成功或失敗的方案。 您可以在進程的句柄轉換為發出信號的 state 之后以及在其上調用CloseHandle之前隨時調用GetExitCodeProcess

我能想到幾種方法:

#1 - 枚舉

您可以枚舉進程並檢查PID是否在列表中。 查看EnumProcesses

#2 - 檢查退出代碼

您可以使用GetExitCodeProcess 如果進程仍在運行,它將返回STILL_ACTIVE (259)

#3 - 進程句柄

WaitForSingleObject使用具有 SYNCHRONIZE 訪問權限的進程句柄,如果進程未運行,則返回 0。

注意:您不應為 dwMilliseconds 參數指定 INFINITE,因為 function 不會返回,直到進程 state 發出信號(進程終止)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM