Quel appel API ?

Le
Midnight Joker
Bonjour

Quelqu'un connaîtrait-il une fonction API pouvant détecter si une
application SCHPONK est dans la situation : "SCHPONK a provoqué une erreur
générale dans le module SCHPONK.EXE et doit fermer" ?
Je cherche à écrire un programme qui détecterait cette situation, et
rebooterait alors la machine.
Merci d'avance
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #9705201
"Midnight Joker" 3f67894e$0$27596$
Bonjour

Quelqu'un connaîtrait-il une fonction API pouvant détecter si une
application SCHPONK est dans la situation : "SCHPONK a provoqué une erreur
générale dans le module SCHPONK.EXE et doit fermer..." ?
Je cherche à écrire un programme qui détecterait cette situation, et
rebooterait alors la machine.


Bonjour,
J'essairais peut-être un truc du genre :

unsigned long TermStatus;
do
{
GetExitCodeProcess(hProcessSchponk, &TermStatus);
// ProcessMessages ou Wait, à vous de voir
}while(TermStatus == STILL_ACTIVE);

Ou alors

WaitForSingleObject(hProcessSchponk, TimeOut);
unsigned long TermStatus;
GetExitCodeProcess(hProcessSchponk, &TermStatus);


TermStatus vaut maintenant :
- Soit la valeur de retour "normale" définie dans le code de SCHPONK.
- "The exception value for an unhandled exception that caused the process to
terminate", c'est ce vous recherchez.

Je ne sais pas à quel moment l'appli est considérée comme terminée, avant ou
après que la boîte "SCHPONK a provoqué une erreur générale dans le module
SCHPONK.EXE et doit fermer..." ait été acquitée. Tenez-nous au courant.

Bonne journée,
Pierre
Patrick Philippot
Le #9705181
Midnight Joker wrote:
Quelqu'un connaîtrait-il une fonction API pouvant détecter si une
application SCHPONK est dans la situation : "SCHPONK a provoqué une
erreur générale dans le module SCHPONK.EXE et doit fermer..." ?



Vu de Windows, un programme qui afficherait cette MessageBox n'est pas
dans une situation "anormale": il est juste en train d'exécuter son
gestionnaire d'exception par défaut. C'est au programme lui-même (si
vous avez le code source) de remplacer le gestionnaire par défaut par le
sien propre (avec SetUnhandledExceptionFilter) et de faire ce qu'il veut
dans ce cas (comme avertir l'utilisateur et rebooter - ce qui paraît
toutefois une décision un rien extrême).

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr
Mickael Pointier
Le #9705171
Patrick Philippot wrote:
Midnight Joker wrote:
Quelqu'un connaîtrait-il une fonction API pouvant détecter si une
application SCHPONK est dans la situation : "SCHPONK a provoqué une
erreur générale dans le module SCHPONK.EXE et doit fermer..." ?



Vu de Windows, un programme qui afficherait cette MessageBox n'est pas
dans une situation "anormale": il est juste en train d'exécuter son
gestionnaire d'exception par défaut. C'est au programme lui-même (si
vous avez le code source) de remplacer le gestionnaire par défaut par
le sien propre (avec SetUnhandledExceptionFilter) et de faire ce
qu'il veut dans ce cas (comme avertir l'utilisateur et rebooter - ce
qui paraît toutefois une décision un rien extrême).



Sauf si il est dans le cas d'une machine qui est sans écran et sans
clavier, qui se trouve juste être au fin fond d'un placard pour faire
tourner un processus en tache de fond, ou une application quelconque
style "rendu partagé", et que celle ci à la sale habitude de crasher de
temps à autre :)

Dans ce cas une détection d'application planté peut parfaitement se
justifier non ?
Quand au reboot, dès fois c'est nécéssaire, particulièrement lorsque la
raison du plantage est un manque de resources systeme (style fuite de
manettes (ou handle leak ;))

Mike
Patrick Philippot
Le #9705161
Mickael Pointier wrote:
Sauf si il est dans le cas d'une machine qui est sans écran et sans
clavier, qui se trouve juste être au fin fond d'un placard pour faire
tourner un processus en tache de fond, ou une application quelconque
style "rendu partagé", et que celle ci à la sale habitude de crasher
de temps à autre :)

Dans ce cas une détection d'application planté peut parfaitement se
justifier non ?



Oui, c'est sûr. Mais en dehors de la possibilité de traiter ça au niveau
de l'appli elle-même, je ne vois pas comment détecter une exception de
l'extérieur. Encore une fois, quand la boîte de dialogue est affichée,
c'est à la suite d'un unwinding suivant une exception qui n'a pa été
traitée. C'est un déroulement normal du code et cela ne met pas le
process dans un état particulier, je pense. Mais il y a peut-être des
infos que je n'ai pas...

On peut éventuellement envisager d'injecter son propre code dans un
process externe (bon courage):

http://www.codeproject.com/threads/winspy.asp

et de traiter soi-même les exceptions non traitées.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
lo
Le #9705111
"Midnight Joker" a écrit
Quelqu'un connaîtrait-il une fonction API pouvant détecter si une
application SCHPONK est dans la situation : "SCHPONK a provoqué une erreur
générale dans le module SCHPONK.EXE et doit fermer..." ?
Je cherche à écrire un programme qui détecterait cette situation, et
rebooterait alors la machine.
Merci d'avance



Vu le style du programme, je pense qu'une solution "crade" ne serait pas
forcément mal vue ...
Alors je tenterai un timer qui chercher regulièrement si la boite de
dialogue "gnaagna ERREUR GENERALE" existe. Dans le cas où elle existe, je
reboote.

Loic.
Patrick Philippot
Le #9705101
lo wrote:
Vu le style du programme, je pense qu'une solution "crade" ne serait
pas forcément mal vue ...
Alors je tenterai un timer qui chercher regulièrement si la boite de
dialogue "gnaagna ERREUR GENERALE" existe. Dans le cas où elle
existe, je reboote.



Le problème, c'est que justement, certains programmes remplacent le
gestionnaire par défaut d'exceptions non traitées par le leur et que

1) la boîte de dialogue peut-être absolument n'importe quoi dans
n'importe quelle langue (voir système de bug report d'IE, d'Outlook, de
Yahoo Messenger,...). C'est une pratique de plus en plus courante (et je
dirai, souhaitable).

2) il peut très bien ne pas y avoir de boîte de dialogue du tout (tout
dépend du handler d'exceptions non traitées).

Cette approche fonctionnera donc souvent mais pas à 100%. On me dira,
c'est mieux que rien...

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
lo
Le #9705081
"Patrick Philippot" a écrit
Le problème, c'est que justement, certains programmes remplacent le
gestionnaire par défaut d'exceptions non traitées par le leur et que

1) la boîte de dialogue peut-être absolument n'importe quoi dans
n'importe quelle langue (voir système de bug report d'IE, d'Outlook, de
Yahoo Messenger,...). C'est une pratique de plus en plus courante (et je
dirai, souhaitable).

2) il peut très bien ne pas y avoir de boîte de dialogue du tout (tout
dépend du handler d'exceptions non traitées).

Cette approche fonctionnera donc souvent mais pas à 100%. On me dira,
c'est mieux que rien...



J'ai bien compris, mais vu le probleme, je pense que le monsieur est
confronté à un programme bien spécifique ( et il est surement en mesure de
donner exactement le message d'erreur qu'on lui affiche ... ).
Et si il a plein de programmes différents qui plantent régulièrement en
obligeant à rebooter la machine, il devrait penser à traiter les causes
plutot que les conséquences ...

Loic.
Publicité
Poster une réponse
Anonyme