Могу ли я справиться с уничтожением процесса Windows через диспетчер задач? - PullRequest
5 голосов
/ 06 октября 2009

У меня есть приложение для Windows C ++ (app.exe). Когда приложение закрыто, мне нужно выполнить некоторые задачи очистки, специфичные для моего приложения. Что происходит, когда этот процесс (app.exe) убит через диспетчер задач. Предполагая, что приложение все еще реагирует, могу ли я как-то справиться с этой ситуацией в моем app.exe?

Я ищу что-то похожее на то, как kill <pid> в Linux отправит сигнал SIGTERM процессу, указанному в pid. Затем я могу зарегистрировать свой собственный обработчик сигналов для SIGTERM и выполнить очистку.

Ответы [ 3 ]

10 голосов
/ 06 октября 2009

Есть два способа убить приложение в диспетчере задач.

  • Убийство через Приложения * Вкладка будет примерно эквивалентна SIGTERM. Приложение может перехватить его и выполнить дополнительную обработку, поскольку оно в основном отправляет сообщение «закрыть окно». Сообщение для отлова: WM_CLOSE.
  • Убийство через Процессы * Вкладка будет примерно эквивалентна SIGKILL. Вы ничего не можете сделать, чтобы перехватить это, кроме отслеживания действий пользователя в окне списка диспетчера задач и кнопки «Завершить процесс» или наличия контрольного процесса, который будет видеть, когда убит первый.

В качестве альтернативы, проектируйте приложение так, чтобы оно не требовало очистки, или таким образом, чтобы оно выполняло очистку при запуске.

0 голосов
/ 06 октября 2009

Это зависит от того, если пользователь выберет «Завершить задание» для вашего приложения, вы будете уведомлены, и вы сможете его обработать.

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

0 голосов
/ 06 октября 2009

Я думаю, вам понадобится другой PID, который отслеживает PID вашего app.exe и выполняет необходимую работу в то время.

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