繁体   English   中英

如何使用特定位置C#终止进程exe

[英]How do I kill the process exe with a specific location C#

如果我在日志文件中发现错误并重新启动它,我需要杀死一个exe。 这里的主要问题是,我不能只删除基于名称的exe,因为我有从不同文件夹运行的相同exe,例如D:\\ A \\ A1.exe和D:\\ B \\ A1.exe。 我只想从“A”文件夹中删除exe。

我试图关注Dirk Vollmar的解决方案( https://stackoverflow.com/a/2238316/5159431 )。

这个问题 - C#Process Killing

但是,当我调试他的解决方案时,我发现hModuleSnap变量无效。

更新 - 1

正如Micky所说,我使用过Simon的答案。 它确实杀了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();
        }

根据Simon的回答,只使用ProcessModule.FileName 注意FileName返回完整路径,这在帖子中不明显。

MSDN:

获取模块的完整路径 更多...

OP:

但是,当我调试他的解决方案时,我发现hModuleSnap变量无效。

你不应该要求这个。 虽然Dirk的答案很好,但它相当冗长,我觉得过度使用原生电话。

或者,您可以使用我的简化版本的Simon的答案(再次没有本机调用):

注意:您必须运行以下提升的代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM