Immer wenn ein Benutzer einen Fehler meldet, wie z
System.Runtime.InteropServices.SEHException - Externe Komponente hat eine Ausnahme ausgelöst?
Kann ich als Programmierer etwas tun, um die Ursache zu ermitteln?
Szenario: Ein Benutzer (mit einem von meiner Firma geschriebenen Programm) hat diesen Fehler gemeldet. Dies kann ein einmaliger Fehler gewesen sein oder nicht. Sie erwähnten, dass der Computer im letzten Monat zweimal "aufgehört hat zu arbeiten". Ich habe aus Erfahrung gelernt, diese Beschreibung nicht zu wörtlich zu nehmen, da dies normalerweise bedeutet, dass jemand, der sich auf den Computer bezieht, nicht wie erwartet arbeitet. Sie konnten mir keine weiteren Details geben und ich konnte keine protokollierten Fehler finden. Daher kann es dieser Fehler gewesen sein oder nicht.
Aus der Stapelverfolgung ergab sich der eigentliche Fehler beim Erstellen einer Klasse, die keinen Interop-Code direkt aufruft, aber möglicherweise durch die Tatsache erschwert wird, dass das Objekt Teil einer Liste sein kann, die an ein DevExpress-Raster gebunden ist.
Der Fehler wurde von einer nicht behandelten Ausnahmeroutine "abgefangen", die normalerweise das Programm schließt, aber die Option hat, sie zu ignorieren und fortzusetzen. Wenn sie sich entschieden haben, den Fehler zu ignorieren, arbeitete das Programm weiter, aber der Fehler trat erneut auf, als diese Routine das nächste Mal ausgeführt wurde. Es ist jedoch nach dem Schließen und Neustarten unserer Anwendung nicht erneut aufgetreten.
Der betreffende Computer schien nicht gestresst zu sein. Es läuft unter Vista Business, hat 2 GB Arbeitsspeicher und laut Task Manager nur etwa die Hälfte davon mit unserer Anwendung nur etwa 200 MB verwendet.
Es gibt noch eine weitere Information, die relevant sein kann oder nicht. In einem anderen Abschnitt desselben Programms wird eine Komponente eines Drittanbieters verwendet, bei der es sich effektiv um einen Dotnet-Wrapper um eine native DLL handelt. Diese Komponente weist ein bekanntes Problem auf, bei dem gelegentlich eine
Es wurde versucht, geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass der andere Speicher beschädigt ist
Die Komponentenhersteller sagen, dass dies in der neuesten Version ihrer Komponente behoben wurde, die wir intern verwenden, aber dies wurde dem Kunden noch nicht mitgeteilt.
Angesichts der Tatsache, dass die Folgen des Fehlers gering sind (es geht keine Arbeit verloren und das Neustarten des Programms dauert es höchstens eine Minute, bis sie wieder dort sind, wo sie waren) und dass der Kunde in Kürze eine neue Version erhält (mit der aktualisierten dritten Version). Party-Komponente), ich kann natürlich die Daumen drücken und hoffe, dass der Fehler nicht wieder auftritt.
Aber kann ich noch etwas tun?