6
votes

Détecter le crash de processus dans .NET

Y a-t-il un moyen de déterminer qu'un processus que mon programme a commencé s'est écrasé? Actuellement, la solution que j'ai trouvée est de regarder processus.exitcode et d'examiner la valeur: xxx

Je voulais savoir s'il y a un plus élégant (et précis) manière de faire cela?

Je préférerais des réponses en C # et que l'utilisation de p / invoke est bien aussi bien.

PS - J'ai besoin de travailler sur Windows XP / Vista / 7


3 Réponses :


2
votes

Pour Windows 7, il y a Redémarreur d'applications et récupération API . Pour .net, vous pouvez utiliser Pack de code de l'API Windows .

Général, vous pouvez rechercher périodiquement une existence de processus (application WatchDog).


2 commentaires

Merci, mais j'ai besoin d'une solution qui fonctionnera également sur Windows XP. En outre, j'ai besoin de savoir si un processus s'est écrasé, non excité.


Suis-je raison que cela ne puisse être utilisé que lorsque vous avez accès aux codes source du processus qui se bloque?



5
votes

Non.

À moins que vous ne puissiez influencer le processus d'une manière ou d'une autre (écrire des erreurs à l'événement EventLog? Un fichier), vous n'avez pas de moyen externe de savoir qu'un processus s'est écrasé, autant que je sache. Pour vous, c'est juste un processus qui est parti. Pas même Windows va garder ces informations n'importe où que je sache. Cela n'existe plus et sauf si le processus n'a pas gardé les détails, ils sont partis.


0 commentaires

2
votes

Lorsqu'un processus se bloque, Windows d'abord vérifie pour voir si un débogueur juste à temps est configuré sur votre système. Si tel est le cas, vous pouvez avoir ce débogueur s'attacher au processus juste avant qu'il ne se bloque. Habituellement, vous utiliseriez cette fonctionnalité pour générer une mémoire de mémoire en tant que problème de processus. Quel que soit le débogueur que vous attachez peut connaître le PID et le nom du processus de collision. Vous pouvez utiliser des fonctionnalités des outils de débogage existants, tels que Adplus, ou écrire votre propre programme et indiquer à Windows qui est votre débogueur juste à temps et doit être exécuté lorsqu'un processus se bloque. Je pense que vous pouvez configurer un débogueur JIT spécifiquement pour tout nom de processus.

voir http://msdn.microsoft. com / fr-nous / bibliothèque / 5hs4b7a6 (v = vs.80) .aspx

Je pense que si vous définissez la société HKLM \ Software \ Software \ Microsoft \ Windows NT \ Version actuelle \ Adebug \ Entrée de registre de débogueur sur '"DirectoryOfyourProgram \ YourProgram.exe" -p% ld' Où votre préfigramme s'attend à un PID passé Avec le drapeau -p, votre programme sera appelé et adopté le PID correct lorsqu'un processus se bloque.


0 commentaires