2009-10-06 10 views
4

J'ai une application Windows C++ (app.exe). Lorsque l'application est fermée, je dois effectuer des tâches de nettoyage spécifiques à mon application. Que se passe-t-il lorsque ce processus (app.exe) est tué via le Gestionnaire des tâches. En supposant que l'application est toujours sensible, puis-je gérer en quelque sorte cette situation dans mon app.exe?Puis-je gérer le processus de destruction de mes fenêtres via le Gestionnaire des tâches?

Je cherche quelque chose de similaire à comment kill <pid> dans Linux enverra le signal SIGTERM au processus indiqué par pid. Je pourrais alors enregistrer mon propre gestionnaire de signal pour SIGTERM et effectuer le nettoyage.

Répondre

9

Il existe deux manières de supprimer une application dans le Gestionnaire des tâches.

  • de Killing par Applications onglet serait à peu près équivalent de SIGTERM. L'application peut l'intercepter et faire plus de traitement, car elle envoie un message "fermer la fenêtre". Message à attraper est WM_CLOSE.
  • Tuer à travers Processus onglet serait à peu près équivalent à SIGKILL. Il n'y a rien que vous puissiez faire pour intercepter cela, à moins de surveiller les actions de l'utilisateur dans la liste et le bouton Fin du processus du gestionnaire des tâches, ou d'avoir un processus de surveillance qui verra quand le premier est tué.

Vous pouvez également concevoir l'application d'une manière qui ne nécessite pas de nettoyage ou de manière à effectuer le nettoyage au démarrage.

+0

Malheureusement, ne peut pas re-concevoir l'application. C'est une application ancienne de 10 ans avec plusieurs milliers de lignes de code. – Umair

0

Je pense que vous aurez besoin d'un autre PID qui surveille le PID de votre app.exe et fait le travail nécessaire à ce moment-là.

0

Cela dépend, si l'utilisateur choisit de « Fin de tâche » votre demande vous sera avisé et vous pouvez le manipuler see this.

mais si l'utilisateur choisit de mettre fin au processus, vous avez aucun moyen de le manipuler en ton application. Le plus simple serait un deuxième processus ou vous pouvez injecter dans le gestionnaire de processus et raccorder l'API TerminateProcess.

Questions connexes