2010-09-07 9 views
9

Aquí está mi código:OpenSubKey en HKLM Software regresar nula

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

existe la entrada de registro en la máquina. la clave siempre es nula

No creo que esto sea un problema de seguridad. Me estoy ejecutando como administrador. (Incluso he ejecutado explícitamente el ensamblado en modo Administrador).

Estoy usando Visual Studio 2010 ejecutándose en Windows 7 64bit.

Respuesta

15

El problema es que estoy ejecutando 64 bits y mi aplicación está compilada como de 32 bits.

La clave es leído por:

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

No es HKLM\SOFTWARE pero en lugar HKLM\SOFTWARE\Wow6432Node\. Compilar la aplicación como x64 resuelve el problema.

0

He ejecutado su código con un nombre de aplicación diferente (uno para el que tengo una clave) y todo estaba bien, así que el código está bien, pero lo probé en Win XP.

Al estudiar escribir en el registro, me encontré con este artículo sobre registry virtualization en Windows 7 que podrían causar sus problemas:

Windows Vista y versiones posteriores de Windows mejorar la compatibilidad de las aplicaciones para estas aplicaciones redirigiendo automáticamente estas operaciones . Por ejemplo, las operaciones de registro en la tienda global (HKEY_LOCAL_MACHINE \ Software) se redirigen a una ubicación por usuario dentro del perfil del usuario conocido como la tienda virtual (HKEY_USERS \ _Classes \ VirtualStore \ Machine \ Software).

2

intente abrir cada clave de registro individual como esto

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

En lugar de utilizar la cadena @ "SOFTWARE \ ADM";

Cuestiones relacionadas