如果你是想等待那个执行文件执行完的话,我倒是可以提一个意见,是否可行自己试试。
你不要用WaitForInputIdle等待,而是定时检测那个安装程序的窗口状态。安装程序在运行完后应该会弹出一个确认对话框,你就定时用FindWindow查找这个对话框,当出现这个对话框时,再用FindWindowEx进行进一步的判断是否安装完毕。查找窗口可以利用起窗口题和窗口的Class,这些用Spy++就可以看到了。如果你想更加稳妥一些,可以再用
GetWindowThreadProcessId确定一下找到的这个窗口到底是不是你调用的那个程序创建的。至于时间间隔,你可以设为500ms,这个时间对于电脑来说已经很长了。------------------------------------------------------------
白庄论坛http://www.baizhuang.net欢迎您的加盟
最近改版时间:2001-10-17

解决方案 »

  1.   

    你可以玫举系统中的进程,判断进程的th32ParentProcessID是不是procinfo.dwProcessId,
    玫举用processfirst,processnext等函数。 
      

  2.   

    sxbyl(白菜.NET),其实我调用CreateProcess和WaitForInputIdle之后还sleep了20秒,然后开始使用FindWindow来开始检测安装程序的对话框的出现,就因为显示进度栏99%后,WaitForInputIdle返回,我的sleep和FindWindow开始执行,结果安装程序就被阻塞了,一直不进行,不过其他的安装程序没问题,比如CuteFtp就可以不用WaitForInputIdle,也不会被阻塞,所以你的回答就是我现在用的方法
      

  3.   

    bigfool(我很傻可我很温柔) ,你说的办法是正确的,可惜还不行
    我的这段代码是放在一个DLL里了,本想用InstallShield作安装,安装的时候调用我的API函数来实现安装,可惜我的DLL的CreateProcess或者WaitForInputIdle一旦执行完毕,接着执行的时候马上导致Apache安装的停止,始终不知道windows是如何调度各个进程的,有没有哪位大虾知道,给俺解释一下,不胜感激
    我现在通过在WaitForInputidle后马上执行一个AfxMessageBox("Wait")然后我始终不点确定,直到Apache的安装出现Welcome的Dialog才点击,这样可以解决我的问题,可是我不想这样,请指点