Невозможно убить процесс в C#? - PullRequest
1 голос
/ 07 февраля 2020

В настоящее время я разрабатываю программу, которая может вводить Lua скриптов в Roblox (да, я знаю), пока все работает нормально, кроме процесса уничтожения. Поскольку Roblox работает как единый процесс, мне не нужно убивать дерево. Я провел небольшое исследование относительно топи c, и ни один из них не работает.

Roblox работает как процесс, называемый RobloxPlayer.exe, я считаю, что Process.GetProcessesByName должен извлекать процесс через его имя. Быть Роблоксом, а не RobloxPlayer.exe

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

Ответы [ 2 ]

3 голосов
/ 07 февраля 2020

Вы можете выполнить сопоставление строк для всех процессов и завершить любой процесс, который соответствует вашим критериям.

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.

0 голосов
/ 07 февраля 2020

Получить имя текущего процесса в переменной.

var appName = Process.GetCurrentProcess();
var isInstanceAlready = Process.GetProcessesByName(appName.ProcessName).Where(p => p.Id != appName.Id).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...