2016-07-08 39 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?