Wie sollten Sie den Fehler SEHException Diagnose - Externe Komponente hat eine Ausnahme geworfen

StackOverflow https://stackoverflow.com/questions/1313853

Frage

Jedes Mal, wenn ein Benutzer meldet einen Fehler wie

  

System.Runtime.InteropServices.SEHException - Externe Komponente hat eine Ausnahme geworfen

ist es etwas, das ich als Programmierer tun kann, um die Ursache zu ermitteln?

Szenario: Ein Benutzer (ein Programm meiner Firma schrieb mit) hat diesen Fehler gemeldet. Dies kann oder kann nicht ein einmaliger Fehler gewesen sein. Sie erwähnte, dass im letzten Monat hat der Computer zweimal ‚aufgehört zu arbeiten.‘ Ich habe aus Erfahrung gelernt, diese Beschreibung nicht zu allzu wörtlich zu nehmen, da es in der Regel bedeutet, dass jemand auf den Computer bezieht, wird nicht wie erwartet funktioniert. Sie waren nicht in der Lage mir mehr Details zu geben, und ich konnte keine protokollierten Fehler finden. Daher kann es oder auch nicht dieser Fehler gewesen sein.

Aus der Stapel-Trace, war der eigentliche Fehler, wenn eine Klasse konstruieren, die direkt jeden Interop-Code nicht nennen, aber vielleicht durch die Tatsache erschwert, dass das Objekt kann Teil einer Liste, die zu einem DevExpress Grid datengebundene wird.

Der Fehler wurde ‚gefangen‘ durch eine nicht behandelte Ausnahme-Routine, die das Programm wird in der Regel schließen, hat aber eine Option zu ignorieren und fortzufahren. Wenn sie den Fehler zu ignorieren entschieden haben, dann setzte das Programm funktioniert, aber der Fehler wieder aufgetreten ist, wenn diese Routine nächsten Lauf war. Allerdings hat es nicht wieder auftreten nach dem Schließen und unsere Anwendung neu starten.

Der Computer in Frage scheint nicht gestresst zu werden. Es läuft Vista Business, verfügt über 2 GB Speicher und nach Task-Manager nur wurde mit etwa der Hälfte davon mit unserer Anwendung nur etwa 200 MB.

Es gibt eine andere Information, die nicht relevant sind oder nicht. Ein weiterer Abschnitt des gleichen Programms verwendet einen Dritten Komponente, die effektiv ein Dotnet-Wrapper um eine native DLL ist und diese Komponente hat ein bekanntes Problem, wo in sehr seltenen Fällen erhalten Sie ein

  

Versucht zu lesen oder im geschützten Speicher zu schreiben. Dies ist häufig ein Hinweis darauf, dass andere Speicher beschädigt ist

Die Komponentenhersteller sagen, dass dies in der neuesten Version ihrer Komponente behoben worden, die wir im Hause verwenden, aber dies ist nicht an den Kunden noch gegeben.

In Anbetracht, dass die Folgen des Fehlers sind gering (keine Arbeit verloren, und das Programm neu zu starten und immer dorthin zurück, wo sie dauert nur eine Minute höchstens) und gegeben, dass der Kunde wird in Kürze eine neue Version bekommt (mit der aktualisiert Drittkomponente), kann ich natürlich meine Daumen drücken und hoffen, dass der Fehler nicht wieder auftreten.

Aber ist es etwas was ich tun kann?

War es hilfreich?

Lösung

Ja. Dieser Fehler ist eine strukturierte Ausnahme, die nicht in einen .NET-Fehler zugeordnet wurde. Es ist wahrscheinlich die Datagrid-Mapping eine native Ausnahme zu werfen, die nicht abgefangene war.

Sie können sagen, welche Ausnahme von auftritt Blick auf die ExternalException.ErrorCode Eigenschaft. Ich würde Ihren Stack-Trace überprüfen, und wenn es an dem DevExpress Raster gebunden ist, melden Sie das Problem für sie.

Andere Tipps

Ich hatte ein ähnliches Problem mit einem SEHException, die ausgelöst wurde, wenn mein Programm zunächst einen native DLL-Wrapper verwendet. Es stellte sich heraus, dass die native DLL für diesen Wrapper fehlte. Die Ausnahme war in keiner Weise hilfreich in dieser Lösung. Was Hilfe am Ende tat, war procmon im Hintergrund laufen und prüfen, ob es irgendwelche Fehler aufgetreten sind, wenn alle erforderlichen DLLs geladen werden.

Wenn Sie ein Problem haben wie in diesem Beitrag beschreiben:

asp.net Mvc Debugger werfen SEHException

dann die Lösung:

Wenn Sie eine beliebige Anwendung aus Trusteer haben (wie Rapport oder irgendetwas) nur deinstallieren und das System neu starten, wird es funktionieren ... diese Lösung hier gefunden:

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

  

Die Komponentenhersteller sagen, dass dies in der neuesten Version ihrer Komponente behoben worden, die wir im Hause verwenden, aber diese noch an den Kunden gegeben wurden.

Stellen Sie die Komponentenhersteller wie zu testen, ob das Problem, dass der Kunde immer ist das Problem, das sie sagen, dass sie in ihrer neuesten Version behoben haben, ohne / vor ihrer neuesten Version an den Kunden bereitstellen.

Ich habe über diesen Fehler kommen, wenn die Anwendung auf einem Netzwerkfreigabe befindet, und das Gerät (Laptop, Tablet, ...) wird vom Netzwerk getrennt, während die App verwendet werden. In meinem Fall war es aufgrund einer Oberfläche Tablette aus drahtlosem Bereich gehen. Keine Probleme nach einem besseren WAP installieren.

Ein weiterer Informationen ... Habe das Problem heute auf einem Windows-System 2012 R2 x64 TS in denen die Anwendung von einem unc / Netzwerkpfad gestartet wurde. Das Problem trat für eine Anwendung für alle Terminalserver-Benutzer. Die Ausführung der Anwendung gearbeitet lokal ohne Probleme. Nach einem Neustart begann es wieder zu arbeiten - die SEHException geworfen des Constructor hatte init und TargetInvocationException

Meine Maschinenkonfigurationen:

Betriebssystem: Windows 10 Version 1703 (x64)

stand ich diesen Fehler während meiner C # -Projekt in Community Edition von Visual Studio 2017 debuggen. I wurde durch Ausführen p eine native Methode aufrufen / Invoke auf einer C ++ Baugruppe zur Laufzeit geladen. Ich traf den gleichen Fehler gemeldet von OP.

Ich erkennen, dass Visual Studio wurde mit einem Benutzerkonto gestartet, die kein Administrator auf der Maschine war. Dann relauncht ich Visual Studio unter einem anderen Benutzerkonto, die ein Administrator auf der Maschine war. Das ist alles. Mein Problem wurde gelöst und ich habe nicht das Problem Gesicht wieder.

Eine Sache zu beachten ist, dass die Methode, die auf C ++ Baugruppe aufgerufen wurde sollte auf einige Dinge in der Registry schreiben. Ich habe nicht das Debuggen den C ++ Code einige RCA zu tun, aber ich sehe eine Möglichkeit, dass die ganze Sache versagt als Administratorrechte erforderlich sind, Registrierung in System Windows 10 Betriebes zu schreiben. Also früher, wenn Visual Studio wurde unter einem Benutzerkonto ausgeführt wird, die nicht über Administratorrechte auf dem Rechner hat, dann die einheimischen Anrufe versagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top