Le meilleur moyen de détecter un crash de l'application et de la relancer?
Quel est le meilleur moyen de détecter un plantage de l'application dans XP (produit de la même paire de "erreur" windows à chaque fois, chacun avec le même titre de la fenêtre), puis le redémarrer?
Je suis surtout intéressé à entendre les solutions qui utilisent un minimum de ressources système que le système en question est assez vieux.
J'avais pensé à utiliser un langage de script comme AutoIt (http://www.autoitscript.com/autoit3/), et peut-être le déclenchement d'un détecteur de script de quelques minutes?
Cela serait-il mieux le faire en Python, Perl, PowerShell ou tout autre chose?
Des idées, des conseils, ou des pensées beaucoup apprécié.
EDIT: Il ne fait pas de crash (c'est à dire quitter/fin - merci @tialaramex). Il affiche une boîte de dialogue d'attente pour l'entrée d'utilisateur, suivi par une autre boîte de dialogue d'attente pour plus de la saisie de l'utilisateur, puis il fait des sorties. C'est de ces boîtes de dialogue que j'aimerais détecter et de traiter avec.
Quelle est l'erreur? L'Envoyer à Microsoft, ou de la coutume?
OriginalL'auteur Umber Ferrule | 2008-09-16
Vous devez vous connecter pour publier un commentaire.
Comment sur la création d'un wrapper application qui lance la mauvaise application comme un enfant et attend-il? Si le code de sortie de l'enfant indique une erreur, puis redémarrez-le, d'autre sortie.
OriginalL'auteur Vinko Vrsalovic
Meilleur moyen est d'utiliser un nom de mutex.
Explication: Lorsqu'un thread se termine sans libérer le mutex n'importe quel autre processus en attente pour elle peut acquérir, mais il obtiendra un WAIT_ABANDONED comme valeur de retour, sens le mutex est abandonné et donc l'état de l'article, il a été protégée peut être dangereux.
De cette façon, votre deuxième application ne consommez pas de cycles CPU, qu'il va les garder en attente pour le mutex (et c'est entièrement contenue gérée par le système d'exploitation)
OriginalL'auteur Jorge Córdoba
Je pense que le principal problème est que le Dr Watson affiche une boîte de dialogue
et de maintenir un processus vivant.
Vous pouvez écrire votre propre débogueur à l'aide de l'API de Windows et
exécutez le plantage de l'application à partir de là.
Cela permettra d'éviter d'autres débogueurs, de la capture de l'accident de
votre demande et vous pourrait également assister à l'événement d'Exception.
Puisque je n'ai pas trouvé d'exemple de code, j'ai écrit ce
Python rapide et sale de l'échantillon. Je ne suis pas sûr de savoir comment il est robuste
en particulier la déclaration de DEBUG_EVENT pourrait être améliorée.
OriginalL'auteur Leonhard
Je me rends compte que vous avez à traiter avec Windows XP, mais pour les gens dans une situation similaire sous Vista, il y a de nouveaux récupération de l'incident de l'APIs disponibles. Voici une bonne introduction à ce qu'ils peuvent faire.
OriginalL'auteur Eclipse
Ici est une version légèrement améliorée.
Dans mon test le code précédent exécuter dans une boucle infinie lorsque le mauvais fichier exe généré une "violation d'accès".
Je ne suis pas totalement satisfait par ma solution car je n'ai pas de critères clairs pour connaître les exceptions qui doit être poursuivi et qui ne pouvaient pas être (Le ExceptionFlags est d'aucune aide).
Mais il fonctionne sur l'exemple que j'ai exécuter.
Espérons que cela aide,
Vivian De Smedt
OriginalL'auteur