2016-07-08 36 views
2

如果我在日誌文件中發現錯誤並重新啓動它,我有殺死exe的要求。這裏的主要問題是,我不能只刪除基於名稱的EXE,因爲我有不同的文件夾運行相同的EXE,如D:\ A \ A1.exe和D:\ B \ A1.exe。我只想從「A」文件夾中刪除exe文件。如何殺死具有特定位置的進程exe#C#

我試圖按照Dirk Vollmar的解決方案(https://stackoverflow.com/a/2238316/5159431)。

,這個問題 - C# Process Killing

但是,當我調試他的解決方案,我發現hModuleSnap變量是無效的。

更新 - 1

至於米奇的建議,我已經使用了西蒙的回答。它確實殺死了exe(謝謝)。但是,我收到一條錯誤消息:「System.ComponentModel.Win32Exception:只有ReadProcessMemory或WriterocessMemory請求的一部分已完成」。

以下是示例代碼。

string path1 = @"F:\Software\Application\Runner.exe"; 


     try 
     { 
      Process[] runningProcesses = Process.GetProcesses(); 

      foreach (Process process in runningProcesses) 
      { 
       // now check the modules of the process 
       foreach (ProcessModule module in process.Modules) 
       { 
        if (module.FileName.Equals(path1)) 
        { 
         process.Kill(); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
      Console.ReadLine(); 
     } 
+1

_「System。ComponentModel.Win32Exception「_--我在枚舉某些OS ProcessModule時遇到過這種情況,您可以通過不直接讀取'process.MainModule'而直接枚舉'process.Modules'來修復它。更高效,更重要的是**無例外* *。你也不應該用一個新的問題來更新你的問題 - 作爲_new問題_留下你原來的問題沒有改變:) – MickyD

回答

3

只要使用ProcessModule.FileName根據Simon's answer。注意FileName返回完整路徑,這在帖子中並不明顯。

MSDN:

獲取完整路徑到模塊。 More...

OP:

但是,當我調試他的解決方案,我發現hModuleSnap變量是無效的。

你不應該要求這個。雖然Dirk's answer是好的,但它很冗長,我覺得過度使用本地電話。

或者,你可以用我的簡化西蒙的回答的版本(同樣沒有本地話費):

注:您必須運行下列升高

string targetProcessPath = @"c:\windows\system32\notepad.exe"; 
string targetProcessName = "notepad"; 

Process[] runningProcesses = Process.GetProcesses(); 
foreach (Process process in runningProcesses) 
{ 
    if (process.ProcessName == targetProcessName && 
     process.MainModule != null && 
     string.Compare(process.MainModule.FileName, targetProcessPath, StringComparison.InvariantCultureIgnoreCase)==0) 
    { 
     process.Kill(); 
    } 
} 

代碼上面的例子沒有按」由於Process已經有一個很好的MainModule屬性,所以我們可以檢查一下。

現在上面的例子並不令人興奮,但它確實允許您在計算機硬盤驅動器的各個部分運行名爲kitty的進程。你可能有一個C:\ A \ kitty.exed:\ B \ kitty.exe

+0

謝謝你@MickyD。你已經回答了錯誤。乾杯 –

+0

@RaviVyas你很受歡迎好的先生:) – MickyD

+0

嗨@MickyD,我以正常用戶的身份運行代碼時遇到訪問被拒絕錯誤,如果我以管理員身份運行,那麼它將成功運行,我知道用戶可能無法訪問系統進程,也嘗試更改構建平臺從32位到64位,但沒有幫助 –

0

你試過process.StartInfo?