webentwicklung-frage-antwort-db.com.de

Wie sollten Sie den Fehler diagnostizieren? SEHException - Externe Komponente hat eine Ausnahme ausgelöst

Immer wenn ein Benutzer einen Fehler meldet, wie z

System.Runtime.InteropServices.SEHException - Externe Komponente hat eine Ausnahme ausgelöst?

was kann ich als Programmierer tun, um die Ursache zu ermitteln?

Szenario: Ein Benutzer (mit einem Programm, das meine Firma geschrieben hat) hat diesen Fehler gemeldet. Dies kann ein einmaliger Fehler sein oder auch 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 funktioniert. Sie konnten mir keine weiteren Details mitteilen und ich konnte keine protokollierten Fehler finden. Daher kann es sein, dass dieser Fehler aufgetreten ist oder nicht.

Nach dem Stack-Trace war der eigentliche Fehler beim Erstellen einer Klasse, die keinen Interop-Code direkt aufruft, aber möglicherweise durch die Tatsache kompliziert, dass das Objekt Teil einer Liste sein kann, die an ein DevExpress-Grid datengebunden ist.

Der Fehler wurde von einer nicht behandelten Ausnahmeroutine "abgefangen", die normalerweise das Programm beendet, aber die Option zum Ignorieren und Fortfahren bietet. Wenn sie sich dafür 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. Nach dem Schließen und Neustarten unserer Anwendung ist es jedoch nicht erneut aufgetreten.

Der betreffende Computer schien nicht gestresst zu sein. Es läuft mit Vista Business, hat 2 GB Arbeitsspeicher und laut Task-Manager hat es mit unserer Anwendung nur etwa 200 MB belegt.

Es gibt noch eine andere Information, die relevant sein kann oder nicht. In einem anderen Abschnitt desselben Programms wird eine Drittanbieter-Komponente verwendet, bei der es sich effektiv um einen Dotnet-Wrapper um eine native DLL handelt. Bei dieser Komponente ist ein Problem bekannt, bei dem gelegentlich ein Problem auftritt

Versuch, geschützten Speicher zu lesen oder zu schreiben. Dies ist oft ein Hinweis darauf, dass ein anderer Speicher beschädigt ist

Die Komponentenhersteller geben an, dass dies in der neuesten Version ihrer Komponente behoben wurde, die wir intern verwenden, dies wurde dem Kunden jedoch noch nicht mitgeteilt.

Angesichts der Tatsache, dass die Folgen des Fehlers gering sind (kein Arbeitsverlust, Neustart des Programms und Rückkehr an die ursprüngliche Position dauert höchstens eine Minute) und angesichts der Tatsache, dass der Kunde in Kürze eine neue Version (mit dem aktualisierten Drittanbieter) erhalten wird. Ich kann natürlich die Daumen drücken und hoffe, dass der Fehler nicht wieder auftritt.

Aber kann ich noch mehr tun?

76
sgmoore

Ja. Dieser Fehler ist eine strukturierte Ausnahme, die keinem .NET-Fehler zugeordnet wurde. Es ist wahrscheinlich Ihre DataGrid-Zuordnung, die eine native Ausnahme auslöst, die nicht erfasst wurde.

An der Eigenschaft ExternalException.ErrorCode können Sie erkennen, welche Ausnahme auftritt. Ich überprüfe Ihren Stack-Trace und melde das Problem, wenn er mit dem DevExpress-Grid verknüpft ist.

26
Reed Copsey

Ich hatte ein ähnliches Problem mit einer SEHException, die ausgelöst wurde, als mein Programm zum ersten Mal einen nativen DLL-Wrapper verwendete. Es stellte sich heraus, dass die native DLL für diesen Wrapper fehlte. Die Ausnahme war in keiner Weise hilfreich bei der Lösung dieses Problems. Am Ende half es, procmon im Hintergrund auszuführen und zu überprüfen, ob es welche gab Fehler beim Laden aller notwendigen DLLs.

6
Maurice Gilden

wenn Sie ein Problem haben, wie in diesem Beitrag beschrieben:

asp.net mvc debugger wirft SEHException

dann lautet die lösung:

wenn Sie eine Anwendung von Trusteer haben (wie Rapport oder ähnliches), deinstallieren Sie einfach Ihr System und starten Sie es neu.

http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application

5
Safran Ali

Die Komponentenhersteller geben an, dass dies in der neuesten Version ihrer Komponente behoben wurde, die wir intern verwenden, dies wurde dem Kunden jedoch noch nicht mitgeteilt.

Fragen Sie den Komponentenhersteller, wie er testen kann, ob das Problem, das der Kunde hat, das Problem ist, von dem er angibt, dass es in seiner neuesten Version behoben wurde, ohne/bevor er seine neueste Version für den Kunden bereitstellt.

3
ChrisW

Ich habe diesen Fehler festgestellt, wenn sich die App auf einer Netzwerkfreigabe befindet und das Gerät (Laptop, Tablet, ...) während der Verwendung der App vom Netzwerk getrennt wird. In meinem Fall lag es daran, dass ein Surface-Tablet nicht in Reichweite war. Keine Probleme nach der Installation eines besseren WAP.

1
Conrad

Nur eine weitere Information ... Hatte dieses Problem heute auf einem Windows 2012 R2 x64 TS-System, auf dem die Anwendung über einen Pfad ohne Netzwerk gestartet wurde. Das Problem trat bei einer Anwendung für alle Terminalserverbenutzer auf. Die lokale Ausführung der Anwendung verlief problemlos. Nach einem Neustart funktionierte es wieder - die SEHException hatte Constructor init und TargetInvocationException ausgelöst

0
user8818528

Meine Maschinenkonfigurationen:

Betriebssystem: Windows 10 Version 1703 (x64)

Beim Debuggen meines C # .Net-Projekts in Visual Studio 2017 Community Edition trat dieser Fehler auf. Ich habe eine native Methode aufgerufen, indem ich p/invoke für eine zur Laufzeit geladene C++ - Assembly ausgeführt habe. Ich bin auf den gleichen Fehler gestoßen, den OP gemeldet hat.

Ich stellte fest, dass Visual Studio mit einem Benutzerkonto gestartet wurde, das kein Administrator auf dem Computer war. Dann habe ich Visual Studio unter einem anderen Benutzerkonto neu gestartet, bei dem es sich um einen Administrator auf dem Computer handelte. Das ist alles. Mein Problem wurde gelöst und ich habe mich dem Problem nicht erneut gestellt.

Zu beachten ist, dass die in C++ Assembly aufgerufene Methode nur wenige Dinge in die Registrierung schreiben sollte. Ich habe den C++ - Code nicht debuggt, um RCA auszuführen, aber ich sehe die Möglichkeit, dass das Ganze fehlgeschlagen ist, da zum Schreiben der Registrierung unter Windows 10 Administratorrechte erforderlich sind. Als Visual Studio früher unter einem Benutzerkonto ohne Administratorrechte auf dem Computer ausgeführt wurde, schlugen die systemeigenen Aufrufe fehl.

0
RBT