Cómo abrir una clave de registro WOW64 desde una aplicación .NET de 64 bits

Mi aplicación .NET (cualquier CPU) necesita leer un valor de registro creado por un progtwig de 32 bits. En Windows de 64 bits esto va bajo la clave Wow6432Node en el registro. He leído que no debe codificar el Wow6432Node, entonces, ¿cuál es la forma correcta de acceder a él con .NET?

En el caso donde explícitamente necesita leer un valor escrito por un progtwig de 32 bits en un progtwig de 64 bits, está bien codificarlo. Simplemente porque realmente no hay otra opción.

Por supuesto, lo resumiría en una función auxiliar. Por ejemplo

public RegistryKey GetSoftwareRoot() { var path = 8 == IntPtr.Size ? @"Software\Wow6432Node" : @"Software"; return Registry.CurrentUser.OpenSubKey(path); } 

Si puede cambiar la versión .Net de destino a v4, entonces puede usar la nueva función OpenBaseKey, por ej.

 RegistryKey registryKey; if (Environment.Is64BitOperatingSystem == true) { registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); } else { registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32); } 

La forma correcta sería llamar a la API nativa y pasar el indicador KEY_WOW64_32KEY a RegOpenKeyEx / RegCreateKeyEx

Extendiendo la respuesta de Anders, hay un buen ejemplo de cómo envolver el identificador resultante en un objeto .NET RegistryKey en el blog de Shahar Prish, pero asegúrese de leer los comentarios.

Tenga en cuenta que el uso sin barniz de la envoltura pinvoke.net de RegOpenKeyEx está plagado de problemas.