Bonjour,
Voilà, je développe en C# une appli qui reçoit des données d'un serveur auquel elle est reliée par un modem GPRS. Or cette appli me claque sans grier gare une belle boîte grise intitulée "svchost.exe Application Erreur" commentée comme ceci :
L'instruction à l'adresse 0x77c43dbd référence la mémoire 0x90909090, la mémoire ne peut pas être écrite.
Ca me rappelle un bel incident de segmentation, j'avais le même genre de choses quand j'utilisais des pointeurs en C++ en ayant oublié de les intialiser, sauf je voyais le nom de mon appli C++ à la place de svchost.exe. Mais que si ce genre d'erreur passe au travers du catch(...) en C++, ca s'attrape très bien en C#, NullReferenceException, et j'ai blindé mon code de gestionnaires d'erreurs.
Ca proviendrait donc d'un traitement interne des DLL système que j'utilise dans mon appli (RasApi32.dll pour la connexion et Kernel32.dll). J'ai pourtant bien fait vérifier qu'aucun appel des fonctions des dll système n'est fait avec des pointeurs nuls.
Pourtant mon appli continue de fonctionner, mais elle ne reçoit plus de données du serveur, et la présence de cette boîte grise est horripilante.
Ce qu'il me faudrait, ce serait donc espionner toutes les instances processus svchost, que j'ai réussi à regrouper dans un tableau de la sorte :
Process[] espionnes = Process.GetProcessByName("svchost");
Mais, malheureusement je ne peux pas faire pour chaque process de ma liste :
processus.StartInfo.ShellExecute = false;
processus.StartInfo.RedirectStandardError = true;
processus.ErrorDataReceived += new DataReceivedEventHandler(Surveille);
Car évidemment les processus sont déjà lancés quand je veux les surveiller, et cela provoque une erreur à l'éxécution.
Si j'arrive à intercerpter la mise en erreur de svchost au moment ou elle survient, c'est gagné, je pourrais flinguer ce sale svchost pas beau et mon appli pourra continuer sans cette boîte grise affreuse (après bien entendu, avoir relancé la communication avec mon serveur...)
L'un entre vous aurait-il une idée de la marche à suivre ? Cela me serait d'un grand secours.
Merci.