2011-09-09 12 views
5

Así que utiliza regedit para añadir lo siguiente en el registro en mi estación de trabajo:que añade una clave de registro, pero no puedo encontrarlo mediante programación

HKLM \ Software \ Foo \ Bar

Bar tiene ak/v par de "wtf"/"idk". Verifiqué que estos cambios "tomaron" cerrando el regedit y volviendo a abrirlo. Hey, todavía están ahí! Hinchar.

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Foo\Bar"); 

if (key != null) 
{ 
    var = key.GetValue("wtf").ToString(); 
} 

El problema es que la clave es nula.

Cuándo. . .

Registry.LocalMachine.OpenSubKey("Software").GetSubKeyNames() 

Se llama, Foo no aparece entre los muchos SubKeyNames.

Así que, obviamente me estoy perdiendo algo estúpido. ¿Qué específicamente me estoy perdiendo?

Respuesta

10

Si está ejecutando un proceso de 32 bits en una versión de Windows de 64 bits, el proceso de 32 bits (su aplicación de prueba) no siempre puede ver las claves que creó utilizando 64 bit regedit.

Intente ejecutar su aplicación como 64 bit o use regedit para abrir la clave usando la ruta HKLM\SOFTWARE\Wow6432Node\Foo\Bar.

Puede leer más sobre 32-bit and 64-bit application data in the registry en MSDN.

+0

Usted y Reizebosch son correctos; es un sistema operativo x64 pero el programa se está ejecutando como una aplicación de 32 bits, y estaba leyendo desde Wow6432Node. – peacedog

4

¿Podría ser un problema de x64? Al leer desde el registro en un proceso x86, se le redirige al nodo Software \ Wow6432.

1

Intenta abrirlo por solo lectura Registry.LocalMachine.OpenSubKey("Software", false).GetSubKeyNames() probablemente solo consigas aquellos en los que puedes escribir.

+0

No lo mencioné en la pregunta, pero los permisos fueron de 5x5; Podría escribir a la llave. – peacedog

Cuestiones relacionadas