pix*_*xel 7 windows winapi visual-c++
我需要从上下文菜单中启动一个单独的进程/应用程序; 我正在使用该功能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);
}
Run Code Online (Sandbox Code Playgroud)
我使用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);
Run Code Online (Sandbox Code Playgroud)
是的,当你不再需要它们时,你可以而且应该关闭这些手柄,包括如果你永远不需要它们的话.
从您链接的页面创建进程:
尽管您指定了安全描述符,但可以限制访问权限,但创建的线程和进程句柄具有完全访问权限.当您不再需要这些句柄时,请使用CloseHandle函数关闭它们.
[编辑]为了强调*should* close在文档中可能没有足够强烈说明的部分,这里引用@ RaymondChen的博客:
在所有的车手都承认了这个过程的死亡之后,这个过程的"肉"终于消失了.剩下的就是"进程对象",它直到进程的所有句柄和进程中的所有线程都被关闭为止.(你确实记得CloseHandle你传递给CreateProcess函数的PROCESS_INFORMATION结构中返回的句柄,不是吗?)
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |