2015-03-30 36 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