服务内部创建一个共享Event(全局的),然后在子线程中不停地查询(OpenEvent),如果父进程退出,这个Event一定找不到。
那么可以退出了。

解决方案 »

  1.   

    正规的方法还是Wait父进程的句柄。因为权限原因打不开父进程的句柄可以用如下几个方案:1、轮询法,子进程获得父进程的id号(传参即可),然后打开父进程句柄,如果打开成功,则等待之;如果打开失败且返回拒绝访问,说明父进程还在,开始轮询。直到OpenProcess失败,但不返回拒绝访问了,说明父进程没有了,子进程退出;2、继承法,利用句柄继承来传递句柄值。这个你可以试试,我暂时不太确定。3、句柄复制法,启动子进程后,父进程打开子进程,然后将自己的进程句柄复制到子进程内,并设法把句柄值告诉子进程
      

  2.   

    难道service中不可以用OpenProcess(bInheritHandle设为TRUE)打开自己然后作为命令行传入CreateProcessAsUser
    然后child process中直接waitfor传入的handle吗? 或者service中用DuplicateHandle复制自己的processhandle给child process然后通过进程间通信将这个handle传给child process让它waitfor?或者CreateProcessAsUser中加入SeDebugPrivilege权限然后child process就可以用OpenProcess打开parent process了?
      

  3.   


    1,OpenProcess永远是失败的,但怎么失败的得看GetLastError的编号。不过也是一种办法,这个和1楼的方法形似。
    2,这个我试过,是不行的。
    3,这个目测需要共享文件或内存,略麻烦。总之,先谢谢这位朋友。
      

  4.   


    我就是不想将一个信号的问题上升到进程间通信。
    SeDebugPrivilege应该也是不行的。我试试。多谢。