无法在 C# 中终止进程?

Posted

技术标签:

【中文标题】无法在 C# 中终止进程?【英文标题】:Unable to kill a process in C#? 【发布时间】:2020-05-23 13:08:00 【问题描述】:

我目前正在开发一个可以将 Lua 脚本注入 Roblox 的程序(是的,我知道),到目前为止一切正常,除了 kill 进程。 由于 Roblox 作为单个进程运行,我不需要杀死树。我已经对该主题进行了一些研究,但没有一个有效。

Roblox 作为一个名为 RobloxPlayer.exe 的进程运行,我相信 Process.GetProcessesByName 应该通过它的名称获取该进程。成为 Roblox,而不是 RobloxPlayer.exe

Process[] processes = Process.GetProcessesByName("Roblox");
foreach (Process process in processes)

    process.Kill();
    process.WaitForExit();

【问题讨论】:

"我认为 Process.GetProcessesByName 应该通过它的名称获取进程。作为 Roblox,而不是 RobloxPlayer.exe" 你为什么这么认为?你有没有试过看看当你使用GetProcessByName("RobloxPlayer")时会发生什么? 感谢您的建议,虽然这不起作用。 可以给我脚本的代码吗? @jwu 我会在发布时将它放在 GitHub 上,它现在没有很多功能。 【参考方案1】:

您可以对所有进程进行字符串匹配并终止任何符合您的条件的进程。

String findThisProcess = "Roblox";

foreach (Process process in Process.GetProcesses()) //provides you with a list of all running processes

    try
               
        if (process.ProcessName.Contains(findThisProcess, StringComparison.InvariantCultureIgnoreCase))
        
            Console.WriteLine($"Process: Path.GetFileName(process.MainModule.FileName), Name: process.ProcessName");
            process.Kill();
            process.WaitForExit();
        
    
    catch (Exception ex)
    
        Console.WriteLine("Couldn't terminate process: " + ex);
    

编辑:添加了 InvariantCultureIgnoreCase 以便它匹配进程,无论它们的大小写如何。例如。即使您输入vsdebugVsDebugConsole.exe 也会被匹配。

【讨论】:

完美运行,谢谢。没有意识到这是一个可行的解决方案。完成!【参考方案2】:

在变量中获取当前进程的名称。

var appName = Process.GetCurrentProcess();
var isInstanceAlready = Process.GetProcessesByName(appName.ProcessName).Where(p => p.Id != appName.Id).FirstOrDefault();

【讨论】:

"我相信Process.GetProcessesByName 应该通过它的名称来获取进程。作为Roblox,而不是RobloxPlayer.exe " 是的,但您提供的解决方案与问题无关。您可以更改您的 p.Id 来检查名称,并且您有一个有效的答案。另外,请注意,任何给定应用程序可能运行多个实例,以 chrome 为例,您可能有 10 个 chrome 进程正在运行。 你测试了吗? @乔尔 他要求通过匹配来查找特定进程,而不是当前进程。您的回答没有为此类匹配提供任何输入。

以上是关于无法在 C# 中终止进程?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Python 中终止 airodump 进程

ERROR_BROKEN_PIPE 无法读取进程终止前产生的进程输出

Powershell 中的“Git Log”命令 - 无法终止进程

无法启动MYSQL服务”1067 进程意外终止”解决办法

如何杀死进程和无法终止带有PID的进程。访问被拒绝

无法启动SQL Sever(MSSQLSERVER)服务(位于本地计算机上)错误 1067进程意外终止?怎么解决啊???求解