Вы не можете обнаружить, что ваш собственный процесс убит. Когда кто-то вызывает NtTerminateProcess() с вашим процессом, и у них есть разрешение на это, вам не сообщается. Ваши потоки останавливаются, и ваш процесс исчезает из-под вас.
К счастью, большая часть очистки не требуется вручную - вся эта память, которую вы не освободили, будет освобождена ОС, все эти системные дескрипторы, которые вы не закрыли, будут автоматически очищены и все временные файлы, которые вы открыли как TEMPORARY (вы делаете это правильно?), будут автоматически удалены.
Причина этого проста. Если вы решили убить программу через диспетчер задач, это связано с тем, что пользователь решил, что это неправильно. Если вы тогда скажете, чтобы это прекратило неправильное поведение, возможно, это может игнорировать вас, потому что это плохо.
Похоже, что лучший способ для вашего управления процессом - предоставить вам законный способ выхода из процесса - будь то через окно, которое обрабатывает событие WM_CLOSE или запускает его в консоли, которая может прерываться с помощью красной кнопки X в углу. Диспетчер задач должен быть крайней мерой. Если у пользователя возникнет проблема с Ctrl + Alt + Del ваш процесс до смерти, у вас нет второго шанса.
Вставить комментарий о том, «насколько безопасно пытаться выполнить очистку, если весь процесс будет снят». –
Проверьте это: http://stackoverflow.com/questions/838261/handling-end-process-of-a-windows-app Версия .net отличается от концепции, но концепция по-прежнему сохраняется. – seth