flcname = App.Path & "\ABC.exe"
   
    pId = Shell(flcname, vbNormalFocus)    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pId)    If hProcess <> 0 Then    Call WaitForSingleObject(hProcess, INFINITE)    Call CloseHandle(hProcess)
  
    End If
   
    所用程序如上,但是每次外部程序ABC.EXE总是闪一下就没了,没有继续运行下去。此时hProcess的值为0.这是为什么啊?非常急,请大家看看啊,谢谢啦~~

解决方案 »

  1.   

    To PctGL:应该不是ABC.EXE的原因,手动双击ABC.EXE是可以一直运行的。
    To sosopain:停在hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pId) 的时候就消失了。
      

  2.   


    你用你的代码测试一个vb编译的空的 exe,看看还有这错吗,如果没有的话还是看看abc有没有什么使用要求吧
    难道这个abc还检测了你的openprocess吗?
      

  3.   


    你按下面步骤试试  首先 打开手动打开ABC.EXE 知其PID后OPENPROCESS  看看是否能取到句柄  
    如不正常 就是程序可能钩住了系统某些函数   
    如果正常 那么进入下一步  用WINRAR打包ABC为RAR压缩文件 然后打开直接在RAR包里运行ABC  看是否正常 
    如不正常 就是程序启动的时候检查父进程是否是WINDOWS的外壳 也就是EXPLORER  不是则自动关闭
    如果这步也正常 那么建议你使用API来代替SHELL这个VB自身函数 重新测试 
      

  4.   

    除了检测父进程的可能性,我认为你应该试下路径问题.ShellExecute 0&, vbNullString, "c:\abc.exe", vbnullstring, "c:\", vbNormalFocus第五个参数传入abc.exe所在路径,试一下能否正常启动.或者使用CreateProcess试一下,一样要注意启动目录参数.我以前写过游戏管理程序,有些游戏主文件启动时如果没有指定路径,会出错.
      

  5.   

    也遇到过类似的问题,后来发现以系统服务或者system用户身份来运行外部程序时会出错,而以普通用户身份来运行外部程序就正常,当然这也跟所运行的外部程序有关系,楼主可参考一下。
      

  6.   

    谢谢大家的回答了,发现还是程序ABC的问题。很感谢大家,分数就平分了吧。