这个问题很困扰,请教各位
进程A  执行 CreateProcessAsUser 调用参数 BOOL bInheritHandles 为 true ,选择了 继承  父进程句柄,来执行某个第三方程序B,都能正常执行,但是跟踪发现  某些情况 由于 这个B 一执行就崩溃,导致A进程在  CreateProcessAsUser 时也会崩溃,没有返回继续执行就崩溃了。
可是 为什么 第三方程序的 崩溃 会 导致 父进程也崩溃呢? B程序有问题,CreateProcessAsUse 应该返回失败 而不是 直接崩溃才对 ?2,调用GetProcessHandleCount 发现一个 MFC 控制台程序 什么也没做 竟然 打开句柄数 就100多个了,怎么会如此多的 打开句柄?

解决方案 »

  1.   


    你显然误解了我的问题,我想问的是 调用  CreateProcessAsUser 这个API 为什么会崩溃? 很多时候 你调用的 是 第三方程序,你并不能控制它的问题,但是这个第三方程序运行就崩溃,并不应该导致 调用方 执行 CreateProcessAsUser 这个API 崩溃
      

  2.   

    进程在  CreateProcessAsUser 时也会崩溃
    这个情况有可以发生, 我有遇到当目标程序配置的manifest错误导致错误, 这个应该属于windows的bug
    发现一个 MFC 控制台程序 什么也没做 竟然 打开句柄数 就100多个了
    如果创建进程使用句柄继承, 那么所有的父进程句柄都会复制过来, 所以会比较多
      

  3.   

    为什么说 CreateProcessAsUser 不会奔溃? 微软没有保障所有API都是安全的
    可以试试 捕捉 SEH 结构化异常 
      

  4.   

    你代码是怎么写的?如何调用的CreateProcessAsUser 函数?
      

  5.   

    估计是 由于 被调用程序 的 DLL 混乱 造成的,但是 这个API 调用崩溃 确实很无解,zgl7903 SEH 结构化异常 的方法 有效,能捕捉到 崩溃。
      

  6.   

    就是 后台服务,通过获取 复制 EXPLORER.EXE 的 token,然后用这个token 来 CreateProcessAsUser (调用参数 bInherit 为FALSE),一般程序都很正常,父子进程 通过 命名管道方式 通讯,但是发现 调用的程序 执行中时也有可能 会导致 父进程的崩溃,原因肯定是 被调用程序问题,但是 这个崩溃 却很让人莫名奇妙,父子进程  的关联 也就是 一个 管道而已。