Загрузка...

How to kill processes that are not listed

Thread in C# created by wDude Feb 5, 2021. 285 views

  1. wDude
    wDude Topic starter Feb 5, 2021 Боюсь быть не там и не тем. 3666 Aug 14, 2017
    Доброго времени суток, перейду сразу к делу....

    У меня имеется список процессов, в этом списке имеются названия процессов которые нужно пропускать, а те процессы, которых нет в списке названий необходимо убить.:facepalm:

    Вроде бы простая задачка, но возникают траблы.

    Пытался выполнить это таким образом:

    Code

    foreach (Process proc in Process.GetProcesses())
    {
    if (!DontKillThis.Contains(proc.ProcessName.ToLower()))
    {
    proc.Kill();
    }
    }
    но всё равно убиваются все процессы, даже те которые в списке.

    Максимально тупая задачка, но решения не могу найти уже полтора часа, в чём может быть трабл? (Если будете предлагать решения, то пожалуйста не юзайте Linq)
     
  2. r3xq1
    r3xq1 Feb 5, 2021 53 Jul 27, 2018
    Проще простого:
    Code
    List<string> name = new List<string>{"svchost", "csrss", "System", "wininit"};

    foreach (Process anti in etc) // Обойдем каждый процесс
    {
    if (name.IndexOf(anti.ProcessName.ToLower())<0) // Если процесса нет в списке
    {
    anti.Kill();
    }
    }
    И ещё чтобы свой случайно не грохнуть процесс, то делаем так:
    Code
    var etc = Process.GetProcesses();
    var currentProcess = Process.GetCurrentProcess();
    foreach (var anti in etc)
    {
    if (name.IndexOf(anti.ProcessName.ToLower()) < 0 && anti.ProcessName != currentProcess.ProcessName)
    {
    anti.Kill();
    }
    }
     
    1. wDude Topic starter
      r3xq1, конечно хорошо, что гугл иногда помогает находить ответы с киберфорума, только вот этот вариант тестил и он не является рабочим.
      (Хотя по факту он верный, и обязан работать, но я не понимаю почему он не работает)
    2. r3xq1
      wDude, Гугл всегда помогает находить нужную информацию... Вариант полностью рабочий, так что не надо выдумывать... Если что-то не работает дебаж и смотри что не так происходит с кодом, точку остановы и вперёд с песней.
    3. View the next comments (2)
  3. r3xq1
    r3xq1 Feb 6, 2021 53 Jul 27, 2018
    Все процессы которые лежат в текстовом файле listproc.txt он находит и обходит.
    Процессы записаны в таком порядке:

    svchost
    csrss
    System
    wininit
    opera

    Code
    namespace ProcListing
    {
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;

    public static class ByPassList
    {
    public static List<string> DontKillThis = new List<string>();
    private static readonly string CurrDir = Environment.CurrentDirectory;
    private static readonly string ListProcessTxt = Path.Combine(CurrDir, "listproc.txt");

    public static void Inizialize()
    {
    if (File.Exists(ListProcessTxt))
    {
    try
    {
    using var file = new FileStream(ListProcessTxt, FileMode.Open);
    using var readFile = new StreamReader(file);
    while (!readFile.EndOfStream)
    {
    DontKillThis.Add(readFile.ReadLine());
    }
    }
    catch (IOException ioe) { Console.WriteLine(ioe.Message); }
    }
    if (DontKillThis.Count > 0)
    {
    Process[] etc = Process.GetProcesses();
    using var currentProcess = Process.GetCurrentProcess();
    foreach (Process anti in etc)
    {
    if (DontKillThis.IndexOf(anti.ProcessName.ToLower()) < 0 && anti.ProcessName != currentProcess.ProcessName)
    {
    Console.WriteLine($"Found Process: {anti.ProcessName}");
    //anti.Kill();
    }
    }
    }
    }
    }
    }
     
    1. wDude Topic starter
      r3xq1, вот почти идентичный код (без проверки на количеситво элементов в DontKillThis и StreamReader через using [хотя какая разница]), но что-то всё равно не так, скорее всего кривизна пальцев рук.
    2. wDude Topic starter
      r3xq1, в общем, позднее попробую твой код, если сработает, то заранее спасибо и пересмотрю полностью свой :hi:, если нет, то просто безысходность :spain: .
Top
Loading...