begin process at 2010 02 10 12:01:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Shell

 > 

Détecter une erreur dans un processus (en l'occurence svchost.exe)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Détecter une erreur dans un processus (en l'occurence svchost.exe)

vendredi 23 mai 2008 à 15:34:58 | Détecter une erreur dans un processus (en l'occurence svchost.exe)

gerbito

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.
vendredi 23 mai 2008 à 16:18:03 | Re : Détecter une erreur dans un processus (en l'occurence svchost.exe)

leprov

cette erreur me fait plutot penser a une erreur d'overflow d'un buffer. par exemple un pointeur qui tes retourné, tu écrit en dehors des limites et tu écrase le pointeur de retour de la fonction. avant de chercher a faire un workaround, vérifie que tu peux pas fixer ca en commencant par les points suivants :
-assure toi que ton code C# ne détruit pas une zone mémoire qu'il a initilisé. il est fréquent que le GC te supprime une zone mémoire que tu n'as pas initilalisée au bon endroit. par exemple, tu initialize une variable que tu passe par référence a une fonction de l'API, mais cette variable etait locale a la fonction.  tu sors de la fonction, le GC passe immédiatement, et le process natif n'a pas eu le temps de copier la zone mémoire (ou travaille dessus directement sans copier) : tu as effacé la mémoire du process natif.
-assure toi que tous tes paramètres correspondent aux requirements msdn. pas de struct mal alignées ou mal formattées (trop grosses, etc). le marshalling passe une zone mémoire trop grosse et le code natif protège pas suffisement l'overflow (suffit qu'il prenne un void* et ca risque de péter plus loin).

souvent ce genre d'erreurs viennent d'une mauvaise gestion mémoire coté C# (faut dire que l'interop est pas tjs ce qu'il y a de plus simple a gérer)


vendredi 23 mai 2008 à 18:26:24 | Re : Détecter une erreur dans un processus (en l'occurence svchost.exe)

gerbito

Merci de ta réponse.

C'est vrai qu'avec le ramasse-miettes on ne pense plus que derrière les variables que l'on déclare se cachent ces bons vieux pointeurs du C.

J'ai mis mes variables de classe représentant les handles et les évènements échangés avec l'API en statique, et je vais laisser le test se faire pendant le week-end.

Il faudrait que je puisse tracer l'utilisation de ces pointeurs dans l'API si ca foire

vendredi 30 mai 2008 à 18:37:35 | Re : Détecter une erreur dans un processus (en l'occurence svchost.exe)

gerbito

Bonjour !

   Voilà, comme leprov me l'a indiqué, j'ai passé en revue tous les handles passés à l'API RAS, les ai mis en statique en prenant bien garde qu'ils ne soient pas réinitialisés par la suite.

   Après un premier résultat qui semblait presque concluant (mon appli a tourné pendant 22 heures de suite avant que l'erreur du svchost ne se manifeste à nouveau, mais l'adresse avait changé), c'est de nouveau la catastrophe...

   L'appli tient à peine 20 minutes depuis que j'ai activé le double tampon d'affichage sur un contrôle (pour éviter d'avoir un rafraîchissement horrible), et c'est de nouveau l'adresse 0x77c43dbd qui pose souci dans svchost. J'ai pourtant suivi les instructions citées sur ce site :
[ Lien ]
pour le double tampon.

   Franchement, je ne sais plus trop quoi faire... Quand cette erreur survient, les connexions se coupent sur la cible ou est éxécutée mon appli.

S'il vous plaît, au secours !

 



Cette discussion est classée dans : exe, appli, erreur, processus, svchost


Répondre à ce message

Sujets en rapport avec ce message

Lancer des appli d'1 exe [ par Franckyom50 ] Fr@nckyx Salut à tous, Voilà, je voulais savoir : est-ce qu'on peux lancer, à partir d'un prog en c#, des applications d'un programme extérieur? Un Première appli C# finie... portabilité??? dernieres questions [ par Diamondduff ] Hello!Ca y est j'ai fait ma premiere appli en c# sur mon poste!(pour info, mon truc jusqu'a aujourd'hui c'était plus le web, asp + com en V6 , et plus Erreur ORA-00020 [ par Caro2005 ] Bonjour,Je rencontre un souci avec une appli c# qui se connecte à une base de données Oracle. Cette application effectue des select, update et insert erreur à l'execution de l'appli [ par Blacknight91 ] bonjour,j'ai l'erreur suivante qui s'affiche dès que j'execute mon appli:============================================ID processus=0x103c (4156), ID th Retrouver le chemin d'un exe [ par clubberzZ ] Bonjour à tous,J'ai un petit problème, supposont que les utilisateurs d'un programme X peuvent choisir l'emplacement de l'installation, et que mon pro Lancer et integrer un .exe dans une appli .net ? [ par kaervas ] Bonjour,Je suis en train de developper un programme en C#/.net 3.5 et j'aimerais lancer un .exe et integrer son processus ET son affichage graphique à Savoir si un processus est actif / erreur if:else [ par Cactuz ] Bonsoir à tous. Je cherche actuellement à créer un programme qui relancerai un processus si il s'est arrêté pour une raison quelconque. Il faut donc a Gestion d'erreur du Framework [ par bucherb ] Hello!!Est-ce quelqu'un saurait comment arrêter l'interception automatique des erreurs du framework?J'ai une exception qui est lancée à un moment donn masquer ou changer un processus [ par warenbe ] Bonjour est ce possible de masquer un processus de maniere a ce qu'il ne se voit pas dans le gestionnaire des taches?et si ce n'est pas possible, peut Petite erreur [ par MorpionMx ] Voilà, j'ai developpé pour quelqu'un une petite appli, mais le probleme, c'est que quand cette personne veut l'executer, elle a l'erreur "l'applicatio


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales