2016-10-21 5 views
0

Ich habe den folgenden Code:Registry Umleitung geschieht nicht für HKEY_CURRENT_USER

RegistryKey objRegKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\MySettings\\Dwm\\Preferences", true); 

Ich habe einen Registrierungsschlüssel vorhanden unter: HKEY_CURRENT_USER \ SOFTWARE \ MySettings \ Dwm \ Einstellungen und so funktioniert dies in Ordnung.

Wenn ich den obigen Code ändern von dem lokalen Rechner statt aktuellen Benutzers zu lesen:

RegistryKey objRegKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MySettings\\Dwm\\Preferences", true); 

und erstellen Sie die folgende Registrierung unter: HKEY_LOCAL_MACHINE \ SOFTWARE \ MySettings \ Dwm \ Einstellungen

Der Code gibt null zurück. Ich verstehe den Grund dafür, dass aufgrund Registry-Umleitung für 32-Bit-Anwendungen auf einem 64-Bit-Betriebssystem versucht, die Registrierung zu lesen: HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432NODE \ MySettings \ Dwm \ Einstellungen und da die Registrierung nicht existiert, es gibt null zurück. Die Frage ist, dass die Umleitung nur für HKEY_LOCAL_MACHINE und nicht für HKEY_CURRENT_USER passiert?

+2

Registry-Umleitung auf HKLM-Schlüssel ist keine grundlegende "immer Redirect" -Affäre. Ob sie umgeleitet, reflektiert oder geteilt werden, folgt einer Reihe von [ziemlich verworrenen Regeln] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384253 (v = vs.85) .aspx). Es gibt einfach viel weniger Regeln für HKCU, hauptsächlich weil die Schlüssel dort für Nicht-Microsoft-Apps verwendet werden und diese Apps bereits wissen, welchen Geschmack sie haben. Nur CLSID- und AppId-Werte werden reflektiert. Du buchstabiert Wow6432Node btw, Buchstabe oh, nicht Null. –

+0

Korrigiert. Danke, dass du es aufgezeigt hast. –

Antwort

1

Registrierungsumleitung ist keine binäre Option - entweder vorhanden oder nicht. Manchmal möchten Sie sowohl 32-Bit-und 64-Bit-Anwendungen, die gleiche "Ansicht" von (Teil der) Registrierung und in anderen Fällen haben Sie nicht.

Deshalb sind die spezifischen keys affected by redirection dokumentiert. HKEY_CURRENT_USER selbst ist freigegeben, wie HKEY_CURRENT_USER\Software ist. Jedoch führt HKEY_CURRENT_USER\Software\Classes\CLSID, die COM-Komponentenregistrierungsdaten (die notwendigerweise 32/64 Bit aufgeteilt ist) enthält, Umleitung durch.

Oder, um es anders auszudrücken, wenn Registry-Umleitung universell wäre, würden Sie nicht alle diese Faltung mit Wow6432Node usw. benötigen Sie hätten nur eine 32-Bit-Registrierung und eine 64-Bit-Registrierung.

Verwandte Themen