2011-12-14 96 views
1

我想測試下面的代碼片段。進程不工作的殺死方法

 static void StartAndKill() 
    { 
     Process ieProc = Process.Start("iexplore.exe", "www.apress.com"); 
     Console.WriteLine("--> Hit enter to kill {0}\t", ieProc.ProcessName); 
     Console.ReadLine(); 
     try 
     { 
      Console.WriteLine(ieProc.Id); 
      ieProc.Kill(); 

     } 
     catch (Exception exception) 
     { 
      Console.WriteLine(exception.Message); 
     } 
    } 

這應該殺死Internet Explorer窗口並關閉它。相反,我得到一個例外,說:

Cannot process request because the process (7256) has exited. 

這種行爲的邏輯解釋是什麼?

回答

1

錯誤消息是誤導性的。 Windows 7的管理權限不是默認的,這個過程沒有被殺死的真正原因。如果我使用「以管理員身份運行」打開命令提示符,代碼將執行它應該執行的操作。我會轉而解決這個問題。

感謝所有回覆的人。

2

如果iexplore進程已經在運行(檢查任務管理器),那麼Process.Start可能會使用現有的進程 - 但是您返回的進程標識不是針對此現有進程,而是一個啓動然後退出的虛擬進程。您可以枚舉現有的iexplore進程並檢查其標題以找到正確的進程,然後獲取其進程ID並殺死它。

+1

同樣適用於其他「單一實例」應用程序(當進程啓動並且在某些情況下,重定向工作可用於存在進程,而不是必需的單一進程)。請注意,IE不需要打開每個選項卡的進程(取決於版本),因此殺死它可能是個壞主意(並且殺死選項卡的進程將簡單地觸發恢復選項卡而沒有任何視覺效果)。 – 2011-12-14 17:06:51

+0

阿列克謝在這裏說什麼似乎是怎麼回事。 – 2011-12-14 20:44:39