zurück zum Artikel

c't-Notfall-Windows 2017 .NET-Fehler

@ctmagazin | Service

Der Bausatz für das c't-Notfall-Windows 2017 aus Ausgabe 26/16 hinterließ leider Spuren im Bausystem. Es beschädigt dort die in der Registry abgelegten Pfade für die .NET-Umgebung. Hier sammeln wir Hinweise zum Fehlverhalten und zur Reparatur betroffener Systeme.

c't-Notfall-Windows 2017 .NET-Fehler

Wenn Ihr Windows-PC beim Systemstart Meldungen à la "Just-In-Time debugging this exception failed" bringt, haben Sie womöglich vor einiger Zeit unseren Notfall-Windows-Bausatz angewendet. Vorweg möchten wir uns deshalb für die Umstände entschuldigen, die das fehlerhafte Skript in unserem Bausatz verursacht hat. Diese Nebenwirkung blieb bei allem Testaufwand leider unbemerkt.

Diese Seite erklärt die technischen Hintergründe und liefert Hilfen, um den Fehler zu beseitigen. Wenn Sie öffentlichen Diskussionsbedarf in diesen Fragen haben, benutzen Sie bitte das Projektforum [1]; dieser Beitrag hat kein eigenes Forum, damit sich Diskussionen an einer Stelle wiederfinden. Wenn Sie uns persönlich ansprechen möchten, richten Sie bitte eine E-Mail an notwin17@ct.de [2] – Danke! Eine Liste der bekannten Meldungen, die der Fehler verursacht, haben wir am Ende dieses Beitrags zusammengestellt [3].

Beim Bauen des Notfallsystems muss Winbuilder eine Registry für Windows PE konstruieren und mit Inhalt füllen. Dazu lädt es die zukünftige Registry als Teilbaum in die des Bausystems. Leider schreibt jenes Skript, welches die .NET-Umgebung einbauen soll, nicht in diesen Teilbaum, sondern stattdessen in die Registry des Bausystems. Dadurch ändern sich Dateipfade, die üblicherweise auf Laufwerk c: zeigen, auf das im Notfallsystem benutzte Laufwerk x:.

Den Zusammenhang zwischen diesem Fauxpas und fehlschlagenden Starts ausgewählter Anwendungen lassen die Fehlermeldungen oft nicht erkennen. Ob überhaupt ein Fehler auftritt, hängt unserer Erkenntnis nach vor allem von der .NET-Version ab, die ein Programm verlangt. Hauptsächlich sind Anwendungen in Mitleidenschaft gezogen, die auf .NET3 und 3.5 aufbauen und Windows Presentation Foundation nutzen.

Entwicklungswerkzeug, etwa Microsofts Visual Studio in älteren Versionen, ist oft betroffen. Auffällig ist auch, dass sich die Community-Ausgabe der aktuellen Fassung auf beschädigten Systemen nicht installieren lässt. Fehlfunktionen legen oft auch Anwendungen an den Tag, die im Aufgaben-Bereich (Tray) der Task-Leiste schlummern: die Oberfläche von Antivirus-Software und die Steuerungsfunktionen von Grafikkarten zum Umschalten der Auflösung.

Ein simples .NET-Programm für WPF zeigt, ob die .NET-Umgebung beschädigt ist.
Unser simples .NET3-WPF-Programm zeigt bei einer intakten .NET-Umgebung diese Ausgabe.

Die Diagnose funktioniert bisher nur für .NET3. Ob Ihr PC beim Bauen Schaden genommen hat oder ob Sie die verfügbaren Updates rechtzeitig eingespielt hatten, können Sie mit unserem kleinen Testprogramm dotnet30test.exe [4] herausfinden. Es handelt sich dabei um eine Anwendung für .NET3 und die Windows Presentation Foundation. Wenn die .NET3-Umgebung intakt ist, sollte es einen kurzen Hinweis auf die verwendete DLLs geben.

Es ist allerdings denkbar, dass auf einem PC überhaupt keine .NET3-Umgebung eingerichtet ist. Dann erscheint statt der Programmausgaben ein entsprechender Hinweis und Windows bietet an, .NET3.5 zu installieren. Das ist zur weiteren Diagnose nicht hilfreich (die Installation klappt gemeinhin, korrigiert einige der Fehler in der Registry und das Testprogramm läuft).

Erscheint einer Fehlermeldung, ist mit der .NET-Umgebung etwas im Argen.
Andernfalls erscheint vorübergehend eine Fehlermeldung.

Wenn der Bausatz die .NET3-Umgebung beschädigt hat, erscheint zumindest für einen Moment eine Fehlermeldung. Einen vergleichbaren Funktionstest für .NET4 haben wir leider noch nicht aufgetan. Hier bleibt vorerst nur die Suche in der Registry nach Laufwerk x:\.

Wer ein System-Backup oder einen Wiederherstellungspunkt vor dem ersten Lauf des Bausatzes angefertigt hat, dem empfehlen wir darauf zurückzugreifen – so lässt sich der Zustand vor dem Bau am zuverlässigsten wiederherstellen.

Andernfalls empfiehlt sich eine manuelle Reparatur mit Hilfe von regedit. Starten Sie das Programm als Administrator und suchen Sie alle Stellen in der Registry auf, an denen Laufwerksbuchstabe x:\ vorkommt (eine Suche über alles genügt dafür).

Wenn die jeweilige Fundstelle beziehungsweise der Pfad in der Registry einen inhaltlichen Zusammenhang zu .NET aufweist, ersetzen Sie den Laufwerksbuchstaben durch das Systemlaufwerk Ihrer Windows-Installation (in der Regel c:\). Wenn Ihre Windows-Installation auf einem anderen Laufwerk liegt oder Sie abweichende Verzeichnisnamen verwendet haben, müssen Sie die Pfade geeignet anpassen.

Neuer Knopf zum Zurücksetzen der verbogenen .NET-Registry-Schlüssel.
Neuer Knopf zum Zurücksetzen der verbogenen .NET-Registry-Schlüssel.

Wer es bequemer mag, findet mit dem nächsten Update für das Projekt auf der Startseite des Winbuilder einen neuen Knopf ".NET-Pfade in Registry reparieren". Wenn Sie den anklicken, übernimmt der Winbuilder das Zurücksetzen der fälschlicherweise gesetzten Pfade. Beachten Sie bitte, dass das dafür ausgeführte Skript nicht den Zustand vor dem Verbiegen, sondern nur einen definierten Zustand nach bestem Wissensstand wiederherstellen kann.

Im Folgenden finden Sie die Schlüssel, die der fehlerhafte Bausatz verändert hat, in Form einer REG-Datei, die zum Reimport in der Registry zur Reparatur geeignet ist. Bitte beachten Sie, dass sich die Schlüssel unterscheiden, je nachdem, ob der Bausatz auf einer 32-Bit- oder 64-Bit-Windows-Installation lief. Die hier dokumentierten REG-Dateien benutzt auch der zuvor beschriebene Korrekturknopf im Winbuilder.

Kopieren Sie die Zeilen in eine Textdatei und speichern Sie diese mit einem beliebigen Namen und der Endung .reg. Falls Ihre Windows-Installation ausnahmsweise einen anderen Laufwerksbuchstaben als c: hat, passen Sie den bitte in der Reg-Datei per Suchen und Ersetzen an.

Zunächst der für x64/64-Bit:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\CDF\v4.0]
"SMSvcHostPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Communication Foundation]
"ReferenceInstallPath"="C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"
"RuntimeInstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.0\\Windows Communication Foundation\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Presentation Foundation]
"InstallRoot"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.0\\WPF\\"
"WPFCommonAssembliesPathx64"="C:\\Windows\\System32\\"
"WPFNonReferenceAssembliesPathx64"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.0\\WPF\\"
"WPFReferenceAssembliesPathx64"="C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Workflow Foundation]
"InstallDir"="C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.5\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\CDF\v4.0]
"SMSvcHostPath"="C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Communication Foundation]
"ReferenceInstallPath"="C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"
"RuntimeInstallPath"="C:\\Windows\\Microsoft.NET\\Framework\\v3.0\\Windows Communication Foundation\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Presentation Foundation]
"InstallRoot"="C:\\Windows\\Microsoft.NET\\Framework\\v3.0\\WPF\\"
"WPFCommonAssembliesPathx86"="C:\\Windows\\SysWOW64\\"
"WPFNonReferenceAssembliesPathx86"="C:\\Windows\\Microsoft.NET\\Framework\\v3.0\\WPF\\"
"WPFReferenceAssembliesPathx86"="C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Workflow Foundation]
"InstallDir"="C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework\\v3.5\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Client]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\"

Und jetzt für x86/32-Bit:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\CDF\v4.0]
"SMSvcHostPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Communication Foundation]
"ReferenceInstallPath"="C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"
"RuntimeInstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.0\\Windows Communication Foundation\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Presentation Foundation]
"InstallRoot"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.0\\WPF\\"
"WPFCommonAssembliesPathx64"="C:\\Windows\\System32\\"
"WPFNonReferenceAssembliesPathx64"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.0\\WPF\\"
"WPFReferenceAssembliesPathx64"="C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Workflow Foundation]
"InstallDir"="C:\\Program Files\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.5\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full]
"InstallPath"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"

Die anschließenden Zitate der uns bekannten Fehlermeldungen und die Beschreibung von Fehlerbildern dienen vor allem dazu, dass Sie per Suche auf diese Seite finden, um überhaupt auf den von uns verursachten Fehlers zu schließen [7] und gegebenenfalls zu beheben.

Beim Systemstart erscheinen Hinweise wie: An unhandled exception ('System.TypeInitializationException') occurred in PresentationFontCache.exe ... Just-In-Time debugging this exception failed.

Dieser Fehler findet sich auch im Ereignisprotokoll

Quelle
PresentationFontCache.exe
Zusammenfassung
APPCRASH

Beschreibung
Stopped working
Pfad der fehlerhaften Anwendung: C:\Windows\Microsoft.NET\Framework64\v3.0\WPF\PresentationFontCache.exe

Problemsignatur
Problemereignisame: APPCRASH
Application Name: PresentationFontCache.exe
Application Version: 3.0.6920.8763
Application Timestamp: 56fa3da5
Fault Module Name: KERNELBASE.dll
Fault Module Version: 6.2.14393.479
Fault Module Timestamp: 582588e6
Exception Code: e0434f4d
Exception Offset: 0000000000017788
Betriebsystemversion: 10.0.14393.2.0.0.768.101
Gebietsschema-ID: 1031

Weitere Informationen über das Problem
Bucket-ID: cfacf2df3f491f8bc93dbc279f3aed07 (120631629351)

Beim Starten von Visual Studio 2011 kommt: An exception was thrown by a TaskScheduler

Visual Studio 2013 gibt beim Start aus: The type initializer for '<Module>' threw an exception

Units 2017 meldet: Problemsignatur: System.TypeInitialization

Intel Graphics and Media Control Panel: Gfxui funktioniert nicht mehr.

Folgende Software lief Leserberichten nach nicht mehr – es sind leider keine Fehlermeldungen überliefert: Kaspersky Internet Security, Asus Live Update, CyberHost 6, Star Money 10, Sony Dienst VCSystemTray, HandBrake, PhoneClean

21.12.: Hinweise zur Nutzbarkeit des Testprogramms erweitert

22.12.: Anführungszeichen in der x86/32-Bit-REG-Datei entfernt – ohnehin wirkfrei an dieser Stelle


URL dieses Artikels:
http://www.heise.de/-3576079

Links in diesem Artikel:
[1] https://www.heise.de/forum/bid-2016558
[2] mailto:notwin17@ct.de?subject=Notfall-Windows%2C%20.NET-Fehler
[3] #meldungen
[4] https://www.heise.de/ct/downloads/04/2/1/1/0/0/8/9/dotnet30test.exe
[5] 
[6] 
[7] #beheben