Inkompatible Anwendung unter Windows 7 zum Laufen bringen

    Microsoft Time Zone crashingAuf seinem Blog „Semantic Consonance“ demonstriert Chris Jackson anhand des Microsoft-Tools „Time Zone“ exemplarisch, wie eine inkompatible Anwendung unter Windows 7 doch noch zum Laufen gebracht werden kann. Das .NET-1.1-Programm gibt unter Windows 7 lediglich die Fehlermeldung „Object reference not set to an instance of an object“ aus und bricht ab.

    Fehlerursache geänderte Registry-Struktur

    Mit Hilfe eines Debuggers ermittelt Jackson, dass das Programm versucht, ausgehend vom Registry-Schlüssel HKLM\Software\­Microsoft\Windows NT\­CurrentVersion\Time Zones den Wert Index aus jedem Unterschlüssel zu lesen. Diesen Wert gibt es unter Vista, Server 2008 und Windows 7 nicht mehr, wie die Microsoft Knowledgebase verrät. Time Zone kann damit nicht umgehen und stürzt ab.

    Lösung durch Registry-Virtualisierung

    Zunächst exportiert man HKLM\Software\Microsoft\Windows NT\­CurrentVersion\Time Zones aus einer vorhandenen XP- oder Server-2003-Installation. Per Suchen und Ersetzen im Texteditor ändert man nun alle Schlüsselnamen so um, dass sie auf den VirtualStore zeigen, also alle HKEY_LOCAL_MACHINE in HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE. Nach dem Import des Registry-Auszugs unter Windows 7 befindet sich die Struktur dann also unter

    HKCU\Software\Classes\VirtualStore\MACHINE\Software\Microsoft\­Windows NT\CurrentVersion\Time Zones.

    Microsoft Time Zone runningMittels des Compatibility Administrator aus den Microsoft Application Compatibility Toolkit 5.5 versieht man danach TimeZone.exe mit dem Compatibility Fix VirtualRegistry. Wichtig ist, den Fix mit dem Parameter

    ADDREDIRECT(HKLM\SOFTWARE\Microsoft\Windows%20NT\CurrentVersion\Time%20Zones^HKCU\­SOFTWARE\Classes\VirtualStore­\MACHINE\Software\Microsoft\­Windows%20NT\CurrentVersion\Time%20Zones)

    zu verwenden. Anderenfalls würden die Registry-Zugriffe nicht umgeleitet, da der Zweig HKLM\Software\Microsoft\Windows NT davon normalerweise ausgenommen ist.

    Anmerkung: Da man den Speicherort des virtualisierten Registry-Zweiges hier manuell vorgibt, müsste sich dieser nicht zwangsläufig im VirtualStore befinden, sondern könnte überall sein. Es dient aber der Übersichtlichkeit, ihn ohne Grund nicht zu verändern.

    Keine Kommentare