现在程序a启动了b,并记录下b的句柄,如果a不关闭,则可以通过TerminateProcess直接关闭程序b,但是如果将a关闭,在启动,就无法关闭程序b,难道所获得的句柄与a还有关?请高手指点。

解决方案 »

  1.   

    注意关闭b需要有PROCESS_TERMINATE 权限
      

  2.   

    权限如何获得?这是我的vb代码,请指点Private Sub Command2_Click()
        Dim phandle As Long
        Dim lRet As Long
        'pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, g_lProcessID)
        
        lRet = TerminateProcess(Text1.Text, 0)        ‘text1中输入前面提示的句柄
        'lRet = TerminateProcess(868, 0)
        
    End SubPrivate Sub Command3_Click()
        Dim l
        Dim phandle
        l = Shell("D:\test\test.exe")
        phandle = OpenProcess(PROCESS_ALL_ACCESS, False, l)
        MsgBox phandle
    End Sub
      

  3.   

    应该和A进程无关的,问题是A关了后B进程在A中的值没了啊,要不你存放在文件中,下次启动A时调入,我用复制的方法先将B的ID,留在粘贴板,再次启动A时粘贴在文本框中,然后调用KILL,OK
    ProcessStartInfo pi=new ProcessStartInfo("notepad");
    Process pp=Process.Start(pi);
    this.txt_ID.Text=pp.Id.ToString();
    将Id保留,下次启动粘贴到txt_ID
    int ii=Convert.ToInt16(txt_ID.Text);
    Process pp=Process.GetProcessById(ii);pp.Kill();
    用API的TerminateProces也应该是一样的
      

  4.   

    问题解决了,似乎只能在每次kill前再重新通过id获得一下句柄才可以。