2010-09-07 6 views
9

Hier ist mein Code:OpenSubKey unter HKLM Software Rückkehr null

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ADM"); 

Der Registrierungseintrag auf der Maschine vorhanden ist. Schlüssel ist immer Null.

Ich glaube nicht, dass dies ein Sicherheitsproblem ist. Ich laufe als Administrator. (Ich habe die Assembly sogar explizit im Administratormodus ausgeführt).

Ich verwende Visual Studio 2010 unter Windows 7 64bit.

Antwort

15

Das Problem ist, dass ich 64bit ausführen und meine App als 32bit kompiliert wird.

Microsoft.Win32.RegistryKey key = 
    Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE"); 

Ist das nicht HKLM\SOFTWARE sondern HKLM\SOFTWARE\Wow6432Node\:

Der Schlüssel gelesen werden. Kompilieren der Anwendung als x64 löst das Problem.

0

Ich habe Ihren Code mit einem anderen Anwendungsnamen (einen habe ich einen Schlüssel für) und alles war in Ordnung, so dass der Code in Ordnung ist, aber ich habe dies auf Win XP getestet.

Wenn in der Registrierung des Studiums schreiben, habe ich diesen Artikel über registry virtualization in Windows 7 zu finden, die Ihre Probleme verursachen könnten: automatisch für diese Anwendungen

Windows Vista und späteren Versionen von Windows verbessern die Anwendungskompatibilität durch diese Operationen Umleitung . Beispielsweise werden Registrierungsvorgänge für den globalen Informationsspeicher (HKEY_LOCAL_MACHINE \ Software) an einen benutzerspezifischen Speicherort im Benutzerprofil umgeleitet, der als virtueller Informationsspeicher (HKEY_USERS \ _Classes \ VirtualStore \ Machine \ Software) bezeichnet wird.

2

Versuchen Sie jeden Registrierungsschlüssel individuell wie diese

Microsoft.Win32.RegistryKey key1 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE"); 
Microsoft.Win32.RegistryKey key2 = key1.OpenSubKey(@"ADM"); 

Statt mit dem String zu öffnen @ "ADM SOFTWARE \";

Verwandte Themen