Загрузка...

Как убить процессы, которых нет в списке

Тема в разделе C# создана пользователем wDude 5 фев 2021. 265 просмотров

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

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

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

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

    Код

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

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

    foreach (Process anti in etc) // Обойдем каждый процесс
    {
    if (name.IndexOf(anti.ProcessName.ToLower())<0) // Если процесса нет в списке
    {
    anti.Kill();
    }
    }
    И ещё чтобы свой случайно не грохнуть процесс, то делаем так:
    Код
    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. Посмотреть предыдущие комментарии (1)
    2. r3xq1
      wDude, Гугл всегда помогает находить нужную информацию... Вариант полностью рабочий, так что не надо выдумывать... Если что-то не работает дебаж и смотри что не так происходит с кодом, точку остановы и вперёд с песней.
    3. wDude Автор темы
      r3xq1, проверял? Я лично проверял, даже создавал отдельное приложение и всё осуществлял в одном классе, чтобы точно не пропустить что либо, не вышло, мэби из-за того что список не в подобном формате:
      Код
      List<string> name = new List<string>{"svchost", "csrss", "System", "wininit"};
      А просто в формате (хотя по факту разницы никакой):
      Код
      public List<string> DontKillThis = new List<string>();
      и в него добавляются элементы из текстового документа (ТОЧНО ДОБАВЛЯЮТСЯ, перепроверял много раз и так как надо).
      Я не понимаю в чём может быть проблема, не исключаю кривизну рук, но я серьёзно говорю, что данные вырезки из киберфорума мне ничем не помогли.
    4. wDude Автор темы
      r3xq1, хотя если смотреть по коду этих вырезок, то действительно, они должны являться рабочими и решением моей проблемы, тут я не спорю.
  3. r3xq1
    Все процессы которые лежат в текстовом файле listproc.txt он находит и обходит.
    Процессы записаны в таком порядке:

    svchost
    csrss
    System
    wininit
    opera

    Код
    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 Автор темы
      r3xq1, вот почти идентичный код (без проверки на количеситво элементов в DontKillThis и StreamReader через using [хотя какая разница]), но что-то всё равно не так, скорее всего кривизна пальцев рук.
    2. wDude Автор темы
      r3xq1, в общем, позднее попробую твой код, если сработает, то заранее спасибо и пересмотрю полностью свой :hi:, если нет, то просто безысходность :spain: .
Загрузка...
Top