Wie behebe ich eine .NET Windows-Anwendung, die beim Start mit dem Ausnahmecode 0xE0434352 abstürzt?

81

Ich habe eine .NET Windows Forms- Anwendung in Visual Studio 2010 erstellt. Ich habe auch ein entsprechendes Setup- / Installationspaket über Visual Studio 2010 erstellt. Dies ist eine 32-Bit-Anwendung (x86). (Wir verwenden Windows Forms-Steuerelemente von Drittanbietern, die nur 32-Bit sind.)

Ich kann das Setup-Paket ausführen und erfolgreich in anderen Windows 7 64-Bit-Umgebungen und 32-Bit-Windows XP-Boxen bereitstellen. Die installierte Anwendung läuft auf diesen einwandfrei.

Wenn ich jedoch versuche, Windows Server 2008 R2 - 64 Bit auszuführen , stürzt die Anwendung beim Start ab. Es wurde erfolgreich über das Installationsprogramm ohne Fehler installiert.

Es scheint beim Laden der Anwendung abzustürzen. Ich habe ein Meldungsfeld als erste Zeile in die Anwendung eingefügt, um festzustellen, ob es nicht mehr geladen wurde. Das Meldungsfeld wird nicht angezeigt, daher gehe ich davon aus, dass es beim Laden / Initialisieren der Anwendung auftritt.

Bisher habe ich nicht viel gefunden, um weiterzumachen. Aus den Details sehe ich folgendes:

Exception Code: E0434352

Ich habe herumgefischt / gegoogelt, um zu sehen, ob etwas offensichtlich war, aber ich habe nichts gesehen. Ich habe einige Hinweise auf einen möglichen Stapelüberlauf in der CLR gesehen .

Die Windows Forms-Anwendung wird mit den folgenden Referenzen erstellt:

  • DevExpress
  • Infragistics Winforms-Steuerelemente
  • ORACLE DataAccess-DLL
  • RabbitMQ

Was ist das Problem? Wie gehe ich vor, um das herauszufinden? Wie debugge ich, um weitere nützliche Informationen zu erhalten?

JohnB
quelle
Welche dieser Referenzen verwendet nicht verwalteten Code? Führen Sie aus WinDbg, laden Sie Ihre Anwendung und prüfen Sie, ob Informationen zum Fehler ausgegeben werden.
TastaturP
Möglicherweise auch verwandt, wenn sich herausstellt, dass es sich um das ORACLE-Modul handelt: stackoverflow.com/questions/2100955/…
keyboardP
3
Eine messageBox? Ernst? Schauen Sie sich System.Diagnostics.Debug an.
Henk Holterman
Debugger.Launch () fordert Sie auf, Ihren Prozess an den Visual Studio-Debugger anzuhängen, wenn diese Zeile ausgeführt wird. Halten Sie dies also in der Nähe Ihres Einstiegspunkts, um Prozesse beim Start anzuhängen.
Freundlich
1
Es ist einige Zeit her, aber - Haben Sie es geschafft, das Problem zu beheben? Ich habe einen Kunden, der dieses Verhalten meldet. Es ist schwer, hier auf einer Entwicklungsmaschine zu reproduzieren. Bitte zögern Sie nicht und teilen Sie Ihre Lösung - ich denke, es lohnt sich zu stimmen. Vielen Dank!
Deafjeff

Antworten:

71

0xE0434352 ist der Ausnahmecode für alle .NET-Ausnahmen, sodass Sie nicht viel darüber erfahren . Wie haben Sie diesen Ausnahmecode erhalten? Das Ereignisprotokoll?

Am besten verwenden Sie einen Debugger, um weitere Informationen zu erhalten. Wenn der Visual Studio-Debugger Ihnen nicht hilft, müssen Sie möglicherweise WinDbg mit SOS auschecken . Eine Einführung finden Sie hier und hier . Lassen Sie die Ausnahme abbrechen und prüfen Sie, ob Sie weitere Informationen zum Warum erhalten.

Wenn Sie den Verdacht haben, dass beim Laden von Assemblys ein Problem auftritt, sollten Sie das Fusionsprotokoll überprüfen .

Lars Truijens
quelle
4
Bevor Sie Debugger versuchen, überprüfen Sie Tergivers Antwort
Rabolf
79

Wenn Sie diesen Fehler von der Ereignisanzeige erhalten, sollte ein anderes Fehlerereignis (mindestens eines) aus der Quelle ".NET Runtime" angezeigt werden. Sehen Sie sich diese Fehlermeldung an, da sie die ExceptionInformationen enthält.

Tergiver
quelle
5
Das hat mir wirklich geholfen, danke, also habe ich festgestellt, dass mir eine der Abhängigkeiten fehlt (FileNotFound-Ausnahme)
Pavel K
4

Ich bin mir nicht sicher, ob dies jemandem helfen wird oder nicht, aber da es mein Problem war, denke ich, dass es erwähnenswert ist:

Ich habe diesen Fehler erhalten und es stellte sich heraus, dass es ein Problem mit der Plattform war, für die die EXE erstellt wurde. Wir hatten es für x86 erstellt, und es musste aufgrund einer Oracle-Referenz im Projekt x64 sein. Als wir diese Änderung vorgenommen haben, ist das Problem behoben. Überprüfen Sie also, ob Sie ähnliche Konflikte haben.

John
quelle
4

Es sieht so aus, als würde dieser Fehler 0xe0434352 auf eine Reihe verschiedener Fehler angewendet.

Falls es jemandem hilft, ist dieser Fehler aufgetreten, als ich versucht habe, meine Anwendung auf einer neuen Windows 10-Installation zu installieren. Es funktionierte auf anderen Maschinen und sah so aus, als würde die App kurz vor dem Tod starten. Nach langem Ausprobieren stellte sich heraus, dass für die App DirectX9 erforderlich war. Obwohl eine spätere Version von DirectX vorhanden war, musste sie Version 9 haben. Ich hoffe, das erspart jemandem etwas Frust.

Mike Kelly
quelle
Dies ist ein sehr eigenartiger Fall. Ich bin mir nicht sicher, wie viele diesem besonderen Umstand ausgesetzt sein werden.
Eniola
3

Ich habe einen ganzen Tag damit gekämpft und meine Benutzer gebeten, Debug-Versionen der Software auszuführen. Weil es so aussah, als würde es nicht die erste Zeile laufen lassen. Nur ein Absturz ohne Informationen.

Dann wurde mir klar, dass sich der Fehler in der InitializeComponent des Formulars befand.

Um eine Ausnahme zu erhalten, müssen Sie diese Zeile entfernen (oder auskommentieren):

System.Diagnostics.DebuggerStepThrough()

Sobald Sie die Linie loswerden, erhalten Sie eine normale Ausnahme.

Gabriel Fernandez
quelle
2

Ich habe dies erhalten, als die App bereitgestellt wurde. In meinem Fall habe ich auf der Registerkarte "Projektsicherheit" die Option "Dies ist eine vollständige Vertrauensanwendung" ausgewählt und das Problem behoben.

Joel
quelle
3
Dies ist wahrscheinlich nicht die eigentliche Lösung: Möglicherweise möchten Sie Ihre App / ihre Sicherheitsanforderungen so einrichten, dass sie in einer Umgebung mit mittlerem Vertrauen ordnungsgemäß ausgeführt wird. Aber das ist ein nützlicher Ausgangspunkt - danke!
Rup
1

Problem:

Der .Net-Anwendungscode wird abgebrochen, bevor er ausgeführt wird [Konsolenanwendung oder Windows-Anwendung]

Fehler empfangen: Abgebrochen mit Fehlercode "E0434352"

Ausnahme : Unbekannte Ausnahme

Szenario 1:

Wenn bereits eine Anwendung ausgeführt wird, die einige der abhängigen Ressourcen verwendet hat und diese Ressourcen noch mit der ausgeführten Anwendung verwendet werden, wenn eine andere Anwendung oder dieselbe Exe von einer anderen Quelle ausgelöst wird, gibt eine der Anwendungen den Fehler aus

Szenario 2:

Wenn eine Anwendung durch einen Scheduler oder automatische Jobs ausgelöst wird, befindet sie sich möglicherweise im Hintergrund im Ausführungsstatus. Wenn Sie versuchen, dieselbe Anwendung erneut auszulösen, wird der Fehler möglicherweise ausgelöst.

Lösung:

Erstellen Sie eine Anwendung, wenn und wo die Anwendung alle Ressourcen freigibt, sobald sie abgeschlossen ist. Beenden Sie den gesamten Hintergrundprozess, sobald die Anwendung geschlossen wurde. Überprüfen Sie, ob die Anwendung gleichzeitig aus mehreren Quellen wie Stapelverarbeitung, Taskplaner und externen Tools ausgeführt werden soll. Überprüfen Sie die Anwendungs- und Ressourcenabhängigkeiten und bereinigen Sie den Code bei Bedarf.

BHUVANESH MOHANKUMAR
quelle
In meinem Fall waren der Anwendungsordner oder die darin enthaltenen Dateien gesperrt / geöffnet, da das System ihn nicht umbenennen darf (einfacher Test zur Überprüfung ist, ob Ordner und Unterordner frei oder geöffnet / gesperrt sind). Nach dem erneuten Abmelden / Anmelden am Server werden Sperren
freigegeben
0

Um das Problem für mich zu beheben (als eine Reihe von Anwendungen plötzlich diese Ausnahme auslösten, z. B. CorelDraw X6), habe ich die .NET 4.5-Laufzeit deinstalliert und die .NET 4-Laufzeit installiert. Die beiden Versionen können nicht nebeneinander installiert werden, sie verwenden jedoch dieselben Versionsnummern im GAC . Dies führt zu Problemen, da einige der Funktionen in 4.5 abgeschrieben wurden.

DLL Hell ist zurückgekehrt ...

user857629
quelle
0

Ich hatte in der Ereignisanzeige festgestellt, dass dieser Absturz einem Fehler "System.IO.FileNotFoundException" entsprach.

Also habe ich ProcMon ausgelöst und festgestellt, dass eine der Programm-DLLs vcruntime140 nicht laden konnte. Also habe ich einfach vs15 Redist installiert und es hat funktioniert.

mirh
quelle
0

Wir haben diesen Fehler erhalten, als die Verbindungszeichenfolge zu unserer Datenbank falsch war. Der Schlüssel, um dies herauszufinden, war das Ausführen der dotnet blah.dll, die einen Stacktrace bereitstellte, der uns zeigte, dass die angegebene SQL Server-Instanz nicht gefunden werden konnte. Hoffe das hilft jemandem.

dellyjm
quelle
0

Ich weiß, dass dies ein etwas alter Thread ist, aber ich hatte dieses Problem auch mit der von mir erstellten ac # / WPF-App. Die App funktionierte auf dem Entwicklungscomputer einwandfrei, wurde jedoch auf dem Testcomputer nicht gestartet. Das Anwendungsprotokoll in der Ereignisanzeige gab einen etwas nebulösen .NET-Laufzeitfehler von System.IO.DirectoryNotFoundException aus.

Ich habe versucht, eine Debugging-Software zu verwenden, aber die App lief nicht lange genug, um den Debugger an den Prozess anzuhängen. Nachdem ich einen Tag lang meinen Kopf gegen meinen Schreibtisch geschlagen und viele Webseiten wie diese angesehen hatte, installierte ich VS2019 auf meinem Testgerät, um dieses Problem zu beheben. Ich habe dann die EXE-Datei aus ihrem Ordner (sie befand sich tief im Ordner Users [user] \ AppData \ Apps \ 2.0 ...) in die geöffnete VS2019-Instanz gezogen und von dort aus gestartet. Es wurde sofort ein Dialogfeld mit der Ausnahme und der Ursache angezeigt.

In meinem Fall wurde beim Hinzufügen eines Symbols zu einem der Formulare anstelle des Symbolnamens der vollständige Pfad zum Symbol in die XAML eingefügt. Ich hatte die Symboldatei in den Projektordner kopiert, aber da der Projektordner auf dem Testcomputer nicht vorhanden ist, war dies die Hauptursache für den Fehler. Ich habe dann den Pfad aus der XAML entfernt, nur den Symbolnamen eins belassen, die Lösung neu erstellt und erneut veröffentlicht, und sie lief jetzt auf dem Testcomputer einwandfrei. Natürlich gibt es neben der Ursache des Fehlers noch viele andere Ursachen, aber diese Methode zur Fehlerbehebung sollte hoffentlich die Hauptursache des Fehlers identifizieren, da die Windows-Ereignisanzeige eine etwas vage Antwort gibt.

Verwenden Sie zusammenfassend Visual Studio auf dem Testcomputer als eine Art Debugger. Aber damit es richtig funktioniert, musste ich die EXE-Datei in die IDE ziehen und von dort aus starten (ausführen). Ich glaube, dass dies sowohl mit VS2017 als auch mit VS2019 funktionieren wird. Hoffentlich hilft dies jemandem, der dieses Problem noch hat.

Craig Prusansky
quelle