Chaque fois qu'un utilisateur signale une erreur telle que
System.Runtime.InteropServices.SEHException - Le composant externe a levé une exception?
est-ce que je peux faire quelque chose en tant que programmeur pour déterminer la cause?
Scénario: un utilisateur (utilisant un programme écrit par mon entreprise) a signalé cette erreur. Cela peut ou non avoir été une erreur ponctuelle. Ils ont mentionné que le mois dernier, l'ordinateur avait «cessé de fonctionner» deux fois. J'ai appris par expérience, de ne pas prendre cette description trop littéralement, car cela signifie généralement que quelqu'un lié à l'ordinateur ne fonctionne pas comme prévu. Ils n'ont pas pu me donner plus de détails et je n'ai trouvé aucune erreur enregistrée. Par conséquent, cela peut ou non avoir été cette erreur.
À partir de la trace de pile, l'erreur réelle était lors de la construction d'une classe qui n'appelle directement aucun code d'interopérabilité, mais peut-être compliquée par le fait que l'objet peut faire partie d'une liste liée aux données d'une grille DevExpress.
L'erreur a été «interceptée» par une routine d'exception non gérée qui normalement fermera le programme, mais a une option pour ignorer et continuer. S'ils choisissaient d'ignorer l'erreur, le programme continuait de fonctionner mais l'erreur se reproduisait lors de la prochaine exécution de cette routine. Cependant, cela ne s'est pas reproduit après la fermeture et le redémarrage de notre application.
L'ordinateur en question ne semble pas stressé. Il exécute Vista Business, dispose de 2 Go de mémoire et, selon Task Manager, n'en utilisait que la moitié avec notre application à peu près 200 Mo.
Il y a une autre information qui peut être pertinente ou non. Une autre section du même programme utilise un composant tiers qui est en fait un wrapper dotnet autour d'une DLL native et ce composant a un problème connu où très occasionnellement, vous obtenez un
Tentative de lecture ou d'écriture de la mémoire protégée. Ceci indique souvent qu'une autre mémoire est corrompue
Les fabricants de composants disent que cela a été corrigé dans la dernière version de leur composant que nous utilisons en interne, mais cela n'a pas encore été donné 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 à l'endroit où ils étaient ne prennent qu'une minute au maximum) et étant donné que le client obtiendra sous peu une nouvelle version (avec la troisième mise à jour - partie), je peux évidemment croiser les doigts et espérer que l'erreur ne se reproduira plus.
Mais y a-t-il autre chose que je puisse faire?