amolkapadnis Ответов: 2

Событие Windows service onstop() не срабатывает, когда кто-то убивает процесс В C#


У меня есть служба windows. Я пытаюсь отправить почту, когда кто-то останавливает мою службу.
Но когда кто-то убивает процесс, то событие OnStop не срабатывает.
Он работает, когда кто-то вручную останавливает службу через Диспетчер задач.Как получить почту, когда кто-то убивает процесс.

Что я уже пробовал:

охраняемых переопределить недействительными, то onStop()
{
программа sendmail();
}

2 Ответов

Рейтинг:
17

OriginalGriff

Убийство задачи-это не "нормальное" поведение: это не то же самое, что ее прекращение. Убийство задачи-это радикальная деятельность ОС, которая немедленно завершает потоки и возвращает память процесса в Windows - она не пытается ничего сделать с процессом, чтобы обеспечить упорядоченное завершение работы, очистить потоки или что - то еще-это операционная система, заключающая контракт с сотрудником вместо того, чтобы уведомить его об увольнении за четыре недели!

Когда пользователь убивает ваш процесс, это все: вы не получаете никакого предупреждения, что это произойдет. Единственный способ, которым вы можете отправить свою электронную почту, - это иметь отдельную службу, которая отслеживает работоспособность исходных служб и отправляет электронную почту, когда она прерывается ненормально.


Рейтинг:
1

0x01AA

Единственный вариант, который у вас есть, - это предотвратить убийство службы. Это, кажется, не так просто, см. обсуждение здесь: Создание неуправляемого процесса в Windows-Information Security Stack Exchange[^]

Слабым решением является наличие охранной службы, которая наблюдает за существованием вашей основной службы.

Надеюсь, это поможет.


Richard Deeming

Похоже, это хороший способ пометить ваш сервис как вредоносное ПО!

Существует очень мало законных случаев, когда вам понадобится процесс, который не может быть убит локальным администратором.