2013-11-04 9 views
5

Kann mir jemand sagen, warum ich nicht den Registrierungsschlüssel von "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData" zugreifen kann?Zugriff auf HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows Currentversion Installer Userdata

wenn ich die GetSubKeysNames von "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer" abfragen es nur liefert einen Wert zurück "Secure" ist ----> Wo sind all die anderen Unterschlüssel?

Danke.

+1

Bitte ein paar Zeilen Code schreiben. Wie konstruierst du deine RegistryKey-Instanz? – helb

+1

Die eigentliche Frage ist: "Warum versuchen Sie den Registrierungsschlüssel' HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Installer \ UserData' zugreifen?" Diese Information sind interne OS-Daten. –

Antwort

12

Hohe Wahrscheinlichkeit, dass Sie Ihr Programm auf der 64-Bit-Version von Windows ausgeführt wird, und es wird in 32-Bit-Modus läuft gezwungen. Das Registrierungsredirector wird Sie tatsächlich dazu veranlassen, die Schlüssel in HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node zu lesen. Und ja, das hat auch einen Microsoft \ Windows \ CurrentVersion \ Installer Schlüssel, aber es ist ziemlich leer. Verwenden Sie Regedit.exe zum Vergleichen.

Die einfachste Lösung ist, das zwingt zu entfernen. Projekt + Eigenschaften, Registerkarte Erstellen, legen Sie die Zielplattform-Einstellung auf AnyCPU fest. Wenn Sie VS2012 und höher haben, deaktivieren Sie die Option "32-Bit bevorzugen". Wiederholen Sie dies für die Release-Konfiguration. Wenn Sie müssen laufen in 32-Bit-Modus können Sie die .NET 4+ RegistryKey.OpenBaseKey() -Methode verwenden, vorbei RegistryView.Registry64.