[英]Do I need to use CloseHandle after creating a new process?
我需要從上下文菜單中啟動一個單獨的進程/應用程序; 我正在使用函數launch_program
這樣做。 一旦它終止,我不關心創建過程的退出代碼,我只是想能夠啟動它。 我的問題是:如果變量startup_info
和proc_info
是通過引用CreateProcess
傳遞的,我可以在它們上面使用CloseHandle
,如果我只是要從函數返回到我的主線程嗎?
void launch_program()
{
STARTUPINFO startup_info;
PROCESS_INFORMATION proc_info;
LPCSTR location = "C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe";
ZeroMemory( &startup_info,sizeof(startup_info));
startup_info.cb = sizeof(startup_info);
ZeroMemory( &proc_info,sizeof(proc_info));
CreateProcess( location,
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&startup_info,
&proc_info);
}
我使用https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx作為參考。
PS我只是使用Internet Explorer作為填充程序
[編輯]完整性:
CloseHandle(proc_info.hProcess);
CloseHandle(proc_info.hThread);
是的,您可以並且應該在不再需要它們時關閉這些手柄,包括如果您永遠不需要它們的話。
從您鏈接的頁面創建進程 :
盡管您指定了安全描述符,但可以限制訪問權限,但創建的線程和進程句柄具有完全訪問權限。 當您不再需要這些句柄時,請使用CloseHandle函數關閉它們 。
[編輯]為了強調*should* close
部分,這可能在文檔中沒有足夠強烈地說明,這里引用@ RaymondChen的博客:
在所有的車手都承認了這個過程的死亡之后,這個過程的“肉”終於消失了。 剩下的就是“進程對象”,它直到進程的所有句柄和進程中的所有線程都被關閉為止。 ( 你確實記得CloseHandle你傳遞給CreateProcess函數的PROCESS_INFORMATION結構中返回的句柄,不是嗎? )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.