这个问题很困扰,请教各位
进程A 执行 CreateProcessAsUser 调用参数 BOOL bInheritHandles 为 true ,选择了 继承 父进程句柄,来执行某个第三方程序B,都能正常执行,但是跟踪发现 某些情况 由于 这个B 一执行就崩溃,导致A进程在 CreateProcessAsUser 时也会崩溃,没有返回继续执行就崩溃了。
可是 为什么 第三方程序的 崩溃 会 导致 父进程也崩溃呢? B程序有问题,CreateProcessAsUse 应该返回失败 而不是 直接崩溃才对 ?2,调用GetProcessHandleCount 发现一个 MFC 控制台程序 什么也没做 竟然 打开句柄数 就100多个了,怎么会如此多的 打开句柄?
进程A 执行 CreateProcessAsUser 调用参数 BOOL bInheritHandles 为 true ,选择了 继承 父进程句柄,来执行某个第三方程序B,都能正常执行,但是跟踪发现 某些情况 由于 这个B 一执行就崩溃,导致A进程在 CreateProcessAsUser 时也会崩溃,没有返回继续执行就崩溃了。
可是 为什么 第三方程序的 崩溃 会 导致 父进程也崩溃呢? B程序有问题,CreateProcessAsUse 应该返回失败 而不是 直接崩溃才对 ?2,调用GetProcessHandleCount 发现一个 MFC 控制台程序 什么也没做 竟然 打开句柄数 就100多个了,怎么会如此多的 打开句柄?
你显然误解了我的问题,我想问的是 调用 CreateProcessAsUser 这个API 为什么会崩溃? 很多时候 你调用的 是 第三方程序,你并不能控制它的问题,但是这个第三方程序运行就崩溃,并不应该导致 调用方 执行 CreateProcessAsUser 这个API 崩溃
这个情况有可以发生, 我有遇到当目标程序配置的manifest错误导致错误, 这个应该属于windows的bug
发现一个 MFC 控制台程序 什么也没做 竟然 打开句柄数 就100多个了
如果创建进程使用句柄继承, 那么所有的父进程句柄都会复制过来, 所以会比较多
可以试试 捕捉 SEH 结构化异常