So beheben Sie interne Fehler in der .NET-Laufzeit

6

Vor einigen Wochen hatte mein Firmenlaptop merkwürdige Probleme. Ich konnte den Microsoft Developer Web Server nicht mehr starten (über Visual Studio-> Debug). Später stellte ich fest, dass ich keine .NET-Anwendung ausführen konnte.

Im Gespräch mit Microsoft CLR-Spezialisten nach der Überprüfung meiner DMP-Dateien, sagte er

  1. Beim Laden in Ihren Prozess werden 8 Byte mit dem Offset 0 × 168 in den EXE-Dateien auf 0 gesetzt. Dies ist das Problem, das zum Fehlschlagen der CLR führt. Diese Bits sind in der Datei, die Sie mir zur Verfügung gestellt haben, richtig eingestellt.

  2. C: \ Windows \ System32 \ Detoured.dll wird in den Prozess geladen. Dies bedeutet für mich, dass die Umleitungsbibliothek auf Ihrem Computer verwendet wird, um das Verhalten dieser Prozesse zu ändern.

Ich habe auch herausgefunden, dass beim Booten im abgesicherten Modus alles funktioniert.

Außerdem habe ich herausgefunden, dass die Anwendung funktioniert, wenn ich mit der rechten Maustaste auf eine ausführbare .NET-Datei klicke und "Ausführen als" wähle und meine derzeit angemeldeten Benutzeranmeldeinformationen eingebe. Es funktioniert einfach nicht, wenn ich auf die App doppelklicke.

Es gibt viele Systemereignismeldungen und Dr. Watson-Tippfehler. Hier sind einige, die ich bekomme:

Wenn Sie MS Developer Web Server mit Visual Studio starten, wird im Popup-Fenster "Nachricht" Folgendes angezeigt:

WebDev.WebServer40.exe has encountered a problem and needs
to close. We are sorry for the inconvenience.

VSHost-Systemereignisprotokolleinträge:

Event 1:
Application: MyWebSite.vshost.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an internal error
in the .NET Runtime at IP 791A8BBD (79140000) with exit code 80131506.

Event 2:
Faulting application MyWebSite.vshost.exe, version 10.0.30319.1, 
stamp 4ba2084b, faulting module clr.dll, version 4.0.30319.1, 
stamp 4ba1d9ef, debug? 0, fault address 0x00068bbd.

Systemereignisprotokolleinträge zum Ausführen von Apps von Drittanbietern:

Source: Application Popup
Description: Application popup: #APPNAME#.exe – Application Error : The 
application failed to initialize properly (0xc000007b). Click on OK 
to terminate the application.

Von mir erstellte Anwendungen, die .NET v4 Framework-Systemereignisprotokolle verwenden, sagen:

Source: .NET Runtime
Framework Version: v4.0.30319
Description: The process was terminated due to an internal error in the 
.NET Runtime at IP 791A8BBD (7914000) with exit code 80131506.

Von mir erstellte Anwendungen, die .NET v2 Framework-Systemereignisprotokolle verwenden, sagen:

Source: .NET Runtime
Description: .NET Runtime version 2.0.50727.3053 – Fatal Execution 
Engine Error (7A097706) (80131506)

Hier finden Sie weitere Details in meinem Blog - einschließlich allem, was ich bisher ausprobiert habe, sowie weitere Details und Erzählungen.

Was die Wiederherstellungspunkte betrifft, so ist mein ältester Wiederherstellungspunkt vor ein paar Wochen, an dem ich immer noch dieses Problem hatte, so dass ich nicht denke, dass das Wiederherstellen dieses Punkts viel hilft.

Wie kann ich herausfinden, welcher Prozess das Problem verursacht, und dann den Computer reparieren?

Jim W
quelle
1
Haben Sie eine Liste aller laufenden Prozesse und Dienste, die auf dem System ausgeführt werden? Wenn Sie mit Process Explorer alle geladenen DLL-Dateien anzeigen, wenn die Anwendung abstürzt, ist diese Liste ebenfalls hilfreich. Da der Safemode einwandfrei läuft, gibt es einen Treiber oder einen Prozess, der Code in Ihre .Net-Anwendungen einfügt, der normalerweise beim Start geladen wird.
Darth Android
Ich habe jeden Dienst angehalten und alle Vorgänge abgebrochen, die ich ohne einen Neustart von Windows ausführen kann, und ich habe immer noch die gleichen Probleme. Wenn es sich um einen Hintergrunddienst oder -prozess handelt, kann ich ihn über den Task-Manager, den Prozess-Explorer oder die Windows-Dienste nicht finden.
Jim W
Vielleicht finden Sie es mithilfe von Autoruns: Es kann sich um eine Shell-Erweiterung, einen Dienst oder sogar einen Codec handeln.
Harrymc

Antworten:

3

Da Sie sagen, dass das Problem nicht im abgesicherten Modus auftritt, ist klar, dass dies durch eine installierte Anwendung, ein installiertes Add-On oder einen installierten Treiber verursacht wird.

In Anbetracht der Anstrengungen, die Sie bereits in dieses Projekt investiert haben, würde ich empfehlen, die Festplatte neu zu formatieren und XP neu zu installieren, und dann alle Produkte einzeln neu zu installieren und neu zu starten, um zu prüfen, ob das Problem wieder aufgetreten ist. Alternativ können Sie Produkte mit dem Revo Uninstaller deinstallieren, aber auch Revo kann eine besonders raffinierte Installation übersehen.

Ehrlich gesagt riechen ausführbare Dateien, die beim Start geändert werden, nach einer Virusinfektion, weshalb ich in diesem Fall ausnahmsweise eine Neuformatierung empfehle.

Harrymc
quelle
Das Seltsame ist, dass alles gut funktioniert, wenn ich "Ausführen als" verwende und die gleichen Creds verwende. Das passiert auch nur mit .NET-Apps. Ich bin nicht sicher, ob ich einfach alles neu formatieren kann, da es sich um einen Unternehmens-Laptop handelt, auf dem alle Unternehmens-Apps installiert sind.
Jim W
Ein Firmencomputer kann normalerweise auf ein erstes Image zurückgesetzt werden. Das RunAs ist wirklich rätselhaft, da XP keine eingeschränkten Konten wie Vista und Win7 hat. Es ist immer möglich, dass ein Fehler in einer legitimen Anwendung mehr Schaden anrichtet als ein Virus. In diesem Fall wäre es wahrscheinlich ein Sicherheitsprodukt, da diese seltsame Dinge tun. Sie könnten versuchen, sie zu deaktivieren und zu sehen.
Harrymc
Ich hasse es, zur Neuformatierungsoption zurückzukehren. Ich würde das gerne herausfinden, falls es wieder passiert. Mir wurde jedoch nur mitgeteilt, dass der Corporate Lease meines Laptops abgelaufen ist und ich sowieso einen neuen Laptop besorgen muss. Das scheint die einzige Option zu sein, die jetzt funktioniert.
Jim W
Nun, gute Befreiung!
Harrymc
0

Ihre Antwort war möglicherweise im ersten Absatz - Umwege entfernen. Gehen Sie zu Programme hinzufügen / entfernen, suchen Sie nach Umleitungen und entfernen Sie sie.

Umwege: http://research.microsoft.com/en-us/projects/detours/

Mark Allen
quelle
Umleitungen ist nicht installiert. Es befindet sich im System32-Verzeichnis als Teil von WinXp und wird von verschiedenen Microsoft-Produkten wie Visual Studio, Dr. Watson usw. verwendet. Ich habe versucht, es zu entfernen, und es hat nur zu weiteren Abstürzen anderer Apps geführt und das Problem nicht behoben. Über diesen Link können andere Apps bei Bedarf Umleitungen als Bibliothek verwenden.
Jim W
@ Jim W: Detours ist nicht Teil von Windows XP und wird nicht mit Visual Studio geliefert. "Detours ist eine Bibliothek zur Instrumentierung beliebiger Win32-Funktionen auf x86-, x64- und IA64-Computern. Detours fängt Win32-Funktionen ab, indem der speicherinterne Code für Zielfunktionen neu geschrieben wird." <- In Ihrem ersten Absatz steht, dass dies die Ursache des Problems ist, das Sie haben.
Mark Allen
Ich habe bereits versucht, detoured.dll zu entfernen (indem ich die Datei umbenannte) und ich habe immer noch die gleichen Probleme (plus weitere Probleme).
Jim W
@ Jim W: Verdammt, tut mir leid, das hat nicht geholfen. Wenn es mein Computer wäre und ich derjenige sein müsste, der das Problem behebt, würde mein nächster Schritt darin bestehen, den .NET-Neustart zu entfernen und .NET dann erneut zu installieren. Viel Glück.
Mark Allen
1
@ Jim W: Nun, verdammt. Da es im abgesicherten Modus funktioniert und wenn Sie sich aus irgendeinem Grund erneut authentifizieren ... funktioniert es, wenn Sie einen völlig neuen Benutzer auf demselben Computer erstellen, sich als dieser Benutzer anmelden und dann versuchen, Programme auszuführen?
Mark Allen
0

Ich würde versuchen, Dependency Walker zu verwenden . Profilieren Sie Ihr Programm und speichern Sie die Ausgabe. Starten Sie den abgesicherten Modus und das Profil erneut. Durch Vergleichen der Ausgabe erhalten Sie möglicherweise weitere Informationen darüber, wann das Programm geändert wird.

Sie können auch versuchen, WinDbg aus den Debugging Tools für Windows zu verwenden . (Dieser Link richtet sich an Treiberentwickler, aber ich habe WinDbg für .NET-Programme verwendet.) Um die bestmögliche Debug-Ausgabe zu erhalten, benötigen Sie auch das Windows-Symbolpaket für XP.

Velociraptors
quelle