C# 如何使用特定位置C终止进程exe#
如果在日志文件中发现错误并重新启动,我需要杀死一个exe。这里的主要问题是,我不能仅仅根据名称删除exe,因为我在不同的文件夹中运行相同的exe,例如D:\A\A1.exe和D:\B\A1.exe。我只想从“A”文件夹中删除exe 我试着遵循德克·沃尔马尔的解决方案() 就这项问题— 但是,当我调试他的解决方案时,我发现hModuleSnap变量无效 更新-1 正如米奇建议的那样,我使用了西蒙的答案。它确实杀死了exe(谢谢)。但是,我收到一个错误,提示“System.ComponentModel.Win32Exception:ReadProcessMemory或WriteProcessMemory请求仅完成了一部分” 下面是示例代码C# 如何使用特定位置C终止进程exe#,c#,exe,C#,Exe,如果在日志文件中发现错误并重新启动,我需要杀死一个exe。这里的主要问题是,我不能仅仅根据名称删除exe,因为我在不同的文件夹中运行相同的exe,例如D:\A\A1.exe和D:\B\A1.exe。我只想从“A”文件夹中删除exe 我试着遵循德克·沃尔马尔的解决方案() 就这项问题— 但是,当我调试他的解决方案时,我发现hModuleSnap变量无效 更新-1 正如米奇建议的那样,我使用了西蒙的答案。它确实杀死了exe(谢谢)。但是,我收到一个错误,提示“System.ComponentMode
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();
}
只需按照使用
ProcessModule.FileName
。注意FileName
返回完整路径,这在文章中并不明显
MSDN:
获取模块的完整路径
作品:
但是,当我调试他的解决方案时,我发现hModuleSnap变量无效
你不应该要求这个。虽然很好,但它相当冗长,我觉得过度使用本机调用
或者,您可以使用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.exe和d:\b\kitty.exe谢谢@MickyD。你已经回答了这个错误。CheersHi@MickyD,我在以普通用户身份运行代码时遇到一个拒绝访问错误。如果我以管理员身份运行,那么它将成功运行。我理解用户可能无法访问系统进程。我还尝试将构建平台从32位更改为64位,但没有成功helped@RaviVyas如前所述,您必须“必须运行以下代码”-换句话说,作为管理员@Tommix不,可能有多个记事本运行实例。您是否尝试过process.StartInfo?“System.ComponentModel.Win32Exception”-我在枚举某些操作系统时遇到过这个问题。您可以通过不枚举
process.Modules
而直接读取process.MainModule
来修复它。更高效,更重要的是,没有例外。此外,您不应使用新问题更新您的问题-将原始问题保持不变作为新问题发布:)