2012-02-19 20 views
10

Estoy tratando de acceder al registro de Windows (en Python) para consultar un valor de clave usando _winreg y no puedo hacer que funcione. La siguiente línea devuelve un WindowsError diciendo que "el sistema no puede encontrar el archivo especificado":Python _winreg woes

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, _winreg.KEY_ALL_ACCESS) 

Después de horas de intentos, parece que Python no puede ver más allá de la parte de "Maya" de la trayectoria (parece que el La sub-ruta "2012 \ ... etc ..." es "invisible" o inexistente). Ahora tengo el Editor del Registro abierto y garantizo que HAY tal ruta en HKLM. Estoy en Windows 7 64 bit. ¿Alguna idea de lo que estoy haciendo mal? Esto me está volviendo loco. Gracias ...

+0

has hecho para resolver este problema? –

+0

Creo que sí. Honestamente, no puedo recordar cómo terminé haciéndolo. Quizás supere el problema de alguna manera. Lo siento, no puedo ser de más ayuda ... – user1219144

Respuesta

6

¿También está utilizando una versión de 64 bits de Python, o es una Python de 32 bits? (Esto último es más común). Si está utilizando una versión de 32 bits de Python, el módulo _winreg verá el registro de 32 bits de forma predeterminada, mientras que regedit le mostrará el de 64 bits. Debería poder indicar _winreg para abrir una vista diferente; vea los documentos del módulo _winreg sobre los derechos de acceso, específicamente el subsection on 64-bit specific flags y el the MSDN article it references. Desafortunadamente, no parece que haya una forma de que un proceso de 32 bits acceda al registro de 64 bits, pero me puede faltar algo.

+0

Gracias por su respuesta. Cuando compruebo qué versión de Python tengo (usando sys.version_info) dice (2, 6, 4, 'final', 0). No puedo ver ninguna información de 64 bits o 32 bits. Y la otra cosa es que no sé dónde usar la parte "KEY_WOW64_64KEY". Lo sé, probablemente suene patético pero necesito ayuda ... – user1219144

+0

No puedes ver 32 contra 64 bits en 'sys.version_info', pero puedes verlo en' sys.version' (diga '32 bit 'o '64 bit' allí.) También puede ver 'platform.architecture()'. En cuanto a abrir el registro de manera diferente, como dije, no creo que pueda acceder al registro de 64 bits desde un proceso de 32 bits de la forma en que puede acceder desde un proceso de 64 bits. Sin embargo, puedo estar equivocado; Nunca he hecho mucho con el acceso de registro de 32 bits. –

+0

@ThomasWouters: Tampoco puedo leer las claves con '_winreg' en _Windows 7 64-bit_ & _python 2.7.3 (predeterminado, 10 de abril de 2012, 23:24:47) [MSC v.1500 64 bit (AMD64) ] _. Obtengo el mismo error que @ user1219144 _system no puede encontrar el archivo especificado_. Para probar esto, estoy usando esta [clase de WindowsRegistry] (http://is.gd/8DV8KL) con testcases. Comportamiento que veo: ** 1st ** run ok; ** 2nd ** corre bien; ** Después de reiniciar ** error. Para depurar: intente ejecutar _IDLE_ como administrador colocando 'START C: \ Python27 \ pythonw.exe C: \ Python27 \ Lib \ idlelib \ idle.py' en un archivo **. Bat **, haga clic derecho y luego seleccione _Run como administrator_ – TrinitronX

9

Necesita combinar la clave de acceso con una de las claves de acceso de 64 bits.

_winreg.KEY_WOW64_64KEY Indica que una aplicación en Windows de 64 bits debería funcionar en la vista de registro de 64 bits.

_winreg.KEY_WOW64_32KEY Indica que una aplicación en Windows de 64 bits debería funcionar en la vista de registro de 32 bits.

Probar:

_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, (_winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS)) 
+0

¡Gracias! funciona perfecto – virtualsets

+0

Estaba teniendo un problema donde mis claves secundarias no se enumeran. Agregar el KEY_WOW64_64KEY como dijo solucionó mi problema. Gracias. – FernandoZ

Cuestiones relacionadas