2015-03-30 191 views
0

我正在用c#编写一个程序,该程序在隐身模式下创建了谷歌浏览器的进程。一切顺利。我想开始这个过程,并在2秒后杀死它(并关闭铬窗口)。c#中的杀死进程无法处理请求,因为进程已退出

String a = textBox1.Text + " --incognito";//Get the link that the user types 
       process.StartInfo.FileName = @"C:\Program Files (x86)\Google\Chrome\Application\chrome"; 
       process.StartInfo.Arguments =a; 
       process.Start(); 
       System.Threading.Thread.Sleep(2000); 


       process.Kill(); 

它给我一个错误:无法处理请求,因为进程已退出。

和中断点在process.Kill();线。

+0

错误信息中有什么不清楚? – EZI 2015-03-30 21:54:20

+0

@TylerDay我读过它,但我不明白。我的代码应该如何? – Dionisis 2015-03-30 21:56:38

+0

这可能也有帮助http://stackoverflow.com/questions/14132142/using-c-sharp-to-close-google-chrome-incognito-windows-only – 2015-03-30 22:33:30

回答

1

看起来像铬进程是一个启动器,打开另一个包含铬浏览器的铬进程,然后关闭启动进程。所以你正在关闭一个已经关闭的进程。

+0

所以我应该找到我的情况确切的过程?我的意思是代表隐身铬的一个 – Dionisis 2015-03-30 21:58:15

+1

您可能可以使用WMI来查找该进程的子进程,然后退出它们,或者使用热补丁钩住CreateProcessA和CreateProcessW WINAPI方法,并使用命名管道将子ids发回(可能是一种矫枉过正),或者尝试通过它的窗口名称找到过程,就像您在隐身窗口中所说的那样。其他人可能有一个我没有想到的想法。 – Xela 2015-03-30 22:06:34

-1

该检查可帮助您防止在进程终止之前终止进程。

if(!process.WaitForExit(2000)) { 
    if (!process.HasExited) process.Kill(); 
} 
+0

上面告诉他,他正在试图杀死的铬进程已经被杀死,因为它是另一个铬进程的启动器。在他的情况下,他需要找到正在启动的新隐身进程并杀死它。在这种情况下,你的回答听起来并不有用。 – 2015-03-31 00:16:47