Estoy atascado en un problema de registro de Windows 7 y aunque varias preguntas y respuestas me ayudan a llegar, nada de lo que he visto aborda mi problema en particular. No sé si otras versiones de Windows afectan este problema, pero todos tenemos máquinas win7x64.¿Por qué no puedo leer correctamente los valores de registro de 32 bits en HKCU en la máquina de 64 bits?
Tenemos una amplia variedad de herramientas en nuestro trabajo, algunas C++, algunas C#, algunas python (2.6), etc. También ejecutamos una mezcla de herramientas de 32 y 64 bits. En el pasado, hemos almacenado felizmente información de registro en HKLM. Hemos estado trabajando en mover cosas a HKCU. Hemos tenido muchas discusiones sobre si hacer esto, si afecta a UAC, etc. Realmente queremos intentar hacer este cambio. Dicho esto:
Estamos teniendo problemas para leer/escribir claves de registro en HKCU/software/CompanyABC/App. Tenemos una aplicación de configuración escribir en python que escribe claves de registro en la ubicación anterior usando _winreg. Ya sea que especifiquemos o no KEY_WRITE | KEY_WOW64_32KEY o simplemente KEY_WRITE, los valores se escriben en HKCU/Software/WOW6432Node/companyABC/app. Multa.
Luego tengo una aplicación C# que intenta leer estos valores. Utilizando Microsoft.Win32.Registry, abro la subclave ('HKCU/Software/CompanyABC/app') y no veo mis valores. Resulta que estoy viendo el siguiente comportamiento:
- Al leer/escribir claves de registro de HKLM, todo esto simplemente funciona. La aplicación de Python escribirá en HKLM/Softare/Wow6432Node/CompanyABC/app, y el código de C# se leerá desde esa ubicación. Todo esto también tiene sentido, dado que estamos construyendo nuestras aplicaciones C# y escribiendo los valores de registro a través de python
- Leyendo/escribiendo los valores de registro de HKCU, obtengo un comportamiento diferente. Las funciones _winreg escribirán en HKCU/Sofrware/Wow6432Node/CompanyABC/app, pero la aplicación C# leerá de HKCU/Software/CompanyABC/app. La aplicación C# está construida como una aplicación x86 (no como cualquier CPU y no x64), así que asumí que la aplicación sería redireccionada correctamente al wow6432Node, pero parece que no.
después de algunas investigaciones, parece que HKCU/Software es diferente. El artículo This parece indicar que esta área se "comparte" y no se redirecciona. Si ese es el caso, entonces no puedo entender por qué nuestra aplicación de Python (nuevamente, usando _winreg) está escribiendo en una ubicación en HKCU que usa el Wow6432Node, parece que debería estar escribiéndola sin esa redirección en su lugar. Supongo que podría ser un error en _winreg.
Realmente quiero evitar hacer tachuelas en WOW6432Node explícitamente en nuestras herramientas, pero ahí es donde estoy hoy. ¿Alguien puede explicarme cómo puedo hacer que los accesos al registro de los procesos de 32 y 64 bits en HKCU funcionen correctamente sin tener que recurrir a rutas codificadas en la colmena de 32 bits?
Cuando cambié por primera vez a Windows Vista, todo el sistema de virtualización de registro (además de los problemas de 32/64 bits) me hizo decidir nunca volver a utilizar el registro. Entiendo que esto puede no ser posible, pero si * puede * cambiar a otra cosa (por ejemplo, un archivo de configuración), lo recomiendo encarecidamente. –
No se puede reproducir esto. Para mí, Python 2.6.6 (32 y 64 bit) en Windows 7 64 bit lectura/escritura a/desde HKCU/Software/companyABC/app como se esperaba (no HKCU/Software/WOW6432Node/companyABC/app). – cgohlke
Gracias cgohlke. Echaré otro vistazo a lo que está sucediendo aquí. Agradezco el seguimiento. – Mark