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?
quelle
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, um dies zu lösen. Am Ende hat es geholfen, procmon im Hintergrund auszuführen und zu überprüfen, ob beim Laden aller erforderlichen DLLs Fehler aufgetreten sind.
quelle
Wenn Sie ein Problem haben, wie in diesem Beitrag beschrieben:
asp.net mvc debugger löst SEHException aus
dann ist die Lösung:
Wenn Sie eine Anwendung von Trusteer haben (wie Rapport oder etwas anderes), deinstallieren Sie einfach Ihr System und starten Sie es neu. Es funktioniert einwandfrei. Diese Lösung finden Sie hier:
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application
quelle
Fragen Sie den Komponentenhersteller, wie er testen kann, ob das Problem, das der Kunde erhält, das Problem ist, das er in seiner neuesten Version behoben hat, ohne / bevor er die neueste Version für den Kunden bereitstellt.
quelle
Ich bin auf diesen Fehler gestoßen, 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 an einem Surface-Tablet, das sich außerhalb der Funkreichweite befand. Keine Probleme nach der Installation eines besseren WAP.
quelle
Nur eine weitere Information ... Hatte dieses Problem heute auf einem Windows 2012 R2 x64 TS-System, auf dem die Anwendung von einem unc / Netzwerkpfad aus gestartet wurde. Das Problem trat bei einer Anwendung für alle Terminalserverbenutzer auf. Die lokale Ausführung der Anwendung funktionierte problemlos. Nach einem Neustart funktionierte es wieder - die ausgelöste SEHException war Constructor init und TargetInvocationException
quelle
Meine Maschinenkonfigurationen:
Betriebssystem: Windows 10 Version 1703 (x64)
Beim Debuggen meines C # .Net-Projekts in der Visual Studio 2017 Community Edition ist dieser Fehler aufgetreten. Ich habe eine native Methode aufgerufen, indem ich p / invoke für eine zur Laufzeit geladene C ++ - Assembly ausgeführt habe. Ich habe den gleichen Fehler festgestellt, der von OP gemeldet wurde.
Ich habe festgestellt, 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, das ein Administrator auf dem Computer war. Das ist alles. Mein Problem wurde gelöst und ich habe mich dem Problem nicht mehr gestellt.
Eine Sache zu beachten ist, dass die Methode, die auf C ++ Assembly aufgerufen wurde, einige 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 ausgeführt wurde, das keine Administratorrechte auf dem Computer hatte, schlugen die nativen Aufrufe fehl.
quelle
Ich habe diesen Fehler beim Ausführen von Unit-Tests für das von mir eingerichtete Speicher-Caching erhalten. Es überflutete den Cache. Nach dem Ungültigmachen des Caches und dem Neustart der VM funktionierte dies einwandfrei.
quelle