无法终止C#中的进程?

无法终止C#中的进程?,c#,roblox,C#,Roblox,我目前正在开发一个程序,可以将Lua脚本注入Roblox(是的,我知道),到目前为止,除了kill过程之外,一切都很正常。 由于Roblox作为一个进程工作,我不需要杀死树。我做了一些关于这个主题的研究,但没有一个有效 Roblox作为一个名为RobloxPlayer.exe的进程运行,我认为进程.getProcessByName应该通过它的名称获取进程。是Roblox,而不是RobloxPlayer.exe Process[] processes = Process.GetProcessesB

我目前正在开发一个程序,可以将Lua脚本注入Roblox(是的,我知道),到目前为止,除了kill过程之外,一切都很正常。 由于Roblox作为一个进程工作,我不需要杀死树。我做了一些关于这个主题的研究,但没有一个有效

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

Process[] processes = Process.GetProcessesByName("Roblox");
foreach (Process process in processes)
{
    process.Kill();
    process.WaitForExit();
}

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

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
,使其匹配进程,而不管其大小写。例如,
VsDebugConsole.exe
将被匹配,即使您输入
vsdebug

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

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
,使其匹配进程,而不管其大小写。例如,
VsDebugConsole.exe
将被匹配,即使您输入
vsdebug

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

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

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

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

“我认为Process.getProcessByName应该通过进程的名称获取进程。作为Roblox,而不是RobloxPlayer.exe”你为什么这么认为?您是否尝试过查看使用
GetProcessByName(“RobloxPlayer”)
时会发生什么情况?谢谢您的建议,尽管这不起作用。“我认为Process.GetProcessByName应该通过它的名称来获取进程。作为Roblox,而不是RobloxPlayer.exe”您认为这是为什么?您是否尝试过查看使用
GetProcessByName(“RobloxPlayer”)
时会发生什么情况?谢谢您的建议,尽管这不起作用。非常有效,谢谢。没有意识到这是一个可行的解决方案。完成!很好用,谢谢。没有意识到这是一个可行的解决方案。完成!“我认为
进程.getProcessByName
应该通过进程的名称获取进程。作为Roblox,而不是RobloxPlayer.exe”是的,但您提供的解决方案与问题无关。您可以更改您的p.Id以检查名称,这样您就有了一个有效的答案。另外,请注意,任何给定应用程序都可能有多个实例在运行,以chrome为例,您可能有10个chrome进程在运行。您测试过吗@Joelhe要求通过匹配找到特定流程,而不是当前流程。您的回答没有提供任何匹配的输入。“我认为
进程.getProcessByName
应该通过进程的名称获取进程。作为Roblox,不是RobloxPlayer.exe”是的,但您提供的解决方案与问题无关。您可以更改您的p.Id以检查名称,这样您就有了一个有效的答案。另外,请注意,任何给定应用程序都可能有多个实例在运行,以chrome为例,您可能有10个chrome进程在运行。您测试过吗@Joelhe要求通过匹配找到特定流程,而不是当前流程。您的答案不提供任何此类匹配的输入。