Lorsqu'un utilisateur signale une erreur telle que
System.Runtime.InteropServices.SEHException - Un composant externe a déclenché une exception ?
Y a-t-il quelque chose que je puisse faire, en tant que programmeur, pour déterminer la cause ?
Scénario : Un utilisateur (utilisant un programme écrit par ma société) a signalé cette erreur. Il peut s'agir ou non d'une erreur ponctuelle. Il a mentionné qu'au cours du mois dernier, l'ordinateur s'est "arrêté de fonctionner" à deux reprises. L'expérience m'a appris qu'il ne faut pas prendre cette description trop au pied de la lettre, car elle signifie généralement qu'un élément lié à l'ordinateur ne fonctionne pas comme prévu. Ils n'ont pas été en mesure de me donner plus de détails et je n'ai pu trouver aucune erreur enregistrée. Il peut donc s'agir ou non de cette erreur.
D'après la trace de la pile, l'erreur réelle est survenue lors de la construction d'une classe qui n'appelle pas directement un code interop, mais qui est peut-être compliquée par le fait que l'objet peut faire partie d'une liste liée à une grille DevExpress.
L'erreur a été "attrapée" par une routine d'exception non gérée qui, normalement, ferme le programme, mais qui a la possibilité de l'ignorer et de continuer. S'ils ont choisi d'ignorer l'erreur, le programme a continué à fonctionner mais l'erreur s'est reproduite lors de la prochaine exécution de cette routine. Cependant, elle ne s'est pas reproduite après la fermeture et le redémarrage de notre application.
L'ordinateur en question ne semblait pas être stressé. Il fonctionne sous Vista Business, dispose de 2 Go de mémoire et, selon le Gestionnaire des tâches, il n'en utilisait que la moitié, notre application ne pesant que 200 Mo environ.
Il y a un autre élément d'information qui peut ou non être pertinent. Une autre section du même programme utilise un composant tiers qui est en fait une enveloppe Dotnet autour d'une dll native et ce composant a un problème connu où, très occasionnellement, vous obtenez un message d'erreur de type
Tentative de lecture ou d'écriture d'une mémoire protégée. C'est souvent une indication que d'autres mémoires sont corrompues.
Les fabricants de composants affirment que ce problème a été corrigé dans la dernière version de leur composant que nous utilisons en interne, mais il n'a pas encore été communiqué au client.
Étant donné que les conséquences de l'erreur sont faibles (aucun travail n'est perdu et le redémarrage du programme et le retour à la situation initiale ne prennent qu'une minute au maximum) et que le client recevra bientôt une nouvelle version (avec le composant tiers mis à jour), je peux évidemment croiser les doigts et espérer que l'erreur ne se reproduira pas.
Mais est-ce que je peux faire quelque chose de plus ?