Нет прямого способа избежать стандартного поведения Windows.Пользователь Windows должен иметь возможность убивать приложения.Если приложение не подчиняется, система принудительно уничтожит его.
Однако есть несколько хитростей, часто используемых вирусописателями, вот некоторые (не исчерпывающие):
- Отключение всех системных горячих клавиш относительно тривиально, но Ctrl-Alt-Del не входит в их число.Посмотрите эту превосходную статью проекта кода с примером приложения.
- Создайте DLL и внедрите себя в другие процессы, жизненно важные для системы.Это легко сделать, но убедитесь, что вы переносите свое приложение с .NET на автономный C ++ или другой язык, вы не хотите, чтобы системные процессы зависели от версии .NET, которую вы загружаете.
- Вместо dll-предложения вы можете создать что-то вроде расширения оболочки с такой библиотекой, как эта , которая позволит вам продолжать использовать .NET.Он не предназначен для такого рода вещей, но заставляет пользователя убить
explorer.exe
, чтобы избавиться от вашего приложения. - Создать сервис, который может взаимодействовать с рабочим столом.Ограничьте права службы обычным способом, который по сути дает тот же эффект, что запрещает пользователям убивать ваше приложение указанными вами способами.
- Очевидно, вам следует отменить любые
WM_CLOSE
, WM_EXIT
или WM_KILL
сообщение и просто продолжайте "жить". - Используйте сторожевое приложение, это то, что используют большинство антивирусных сканеров: если вы убьете один процесс, сторож будет его перезапускать.Если вы убьете часового, оно должно быть перезапущено основным приложением.Плохое поведение, но работает.
Но, общий совет: не делайте этого.Разрешите своим пользователям потенциально убивать программу, если это необходимо, иначе будет очень сложно выполнить какое-либо обслуживание.Единственный «поддерживаемый» способ - через службы, где вы можете разрешить специальным пользователям останавливать вашу службу, и ее нельзя остановить с помощью диспетчера задач.