¿OpenSubKey() y otras funciones de registro de Microsoft.Win32 devuelven nulo en sistemas de 64 bits cuando las claves de registro de 32 bits están en Wow6432node en el registro?¿Por qué OpenSubKey() devuelve nulo en mi sistema Windows 7 de 64 bits?
Estoy trabajando en un marco de prueba de unidades que realiza una llamada a OpenSubKey() desde la biblioteca .NET.
Mi sistema de desarrollo es Windows 7 entorno de 64 bits con Visual Studio 2008 SP1 y Windows 7 SDK instalado.
La aplicación que estamos probando unitaria es una aplicación de 32 bits, por lo que el registro se virtualiza bajo HKLM\Software\Wow6432node
. Cuando llamamos: se devuelve
Registry.LocalMachine.OpenSubKey(@"Software\MyCompany\MyApp\");
nulo, sin embargo, que indica explícitamente que mirar aquí funciona:
Registry.LocalMachine.OpenSubKey(@"Software\Wow6432node\MyCompany\MyApp\");
Por lo que entiendo esta función debe ser agnóstico a entornos de 32 bits o de 64 bits y debe saber saltar al nodo virtual.
Aún más extraño es el hecho de que la misma llamada dentro de una versión compilada e instalada de nuestra aplicación funciona perfectamente en el mismo sistema y está obteniendo las claves de registro necesarias para ejecutar; que también se están colocando en HKLM\Software\Wow6432node
.
¿Qué debo hacer?
Seguimiento: resultó que no era necesario crear un nuevo objetivo de plataforma después de todo. Ejecutamos las pruebas a través de nunit, que distribuye un ejecutable específico de x86. El uso del ejecutable específico x86 permitió que las pruebas accedieran al Registro sin cambios en el marco. – BrMcMullin
He encontrado la respuesta aquí [http://stackoverflow.com/questions/1074411/how-to-open-a-wow64-registry-key-from-a-64-bit-net-application](http://stackoverflow .com/questions/1074411/how-to-open-a-wow64-registry-key-from-a-64-bit-net-application) – Jirapong