我正在尝试访问Windows注册表(在Python中)使用 _winreg 查询键值,但我无法使其工作。以下行返回一个WindowsError,指出“系统找不到指定的文件”:
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, _winreg.KEY_ALL_ACCESS)
经过几个小时的尝试,看起来Python无法超越路径的“Maya”部分(看起来像“2012 \ ......等......”子路径是“看不见的”或不存在的)。现在我打开了注册表编辑器,我保证在HKLM中有这样的路径。我在Windows 7 64bit上。知道我做错了什么吗?这让我疯了。感谢...
答案 0 :(得分:10)
您需要将访问密钥与其中一个64位访问密钥组合在一起。
_winreg.KEY_WOW64_64KEY 表示64位Windows上的应用程序应在64位注册表视图上运行。
_winreg.KEY_WOW64_32KEY 表示64位Windows上的应用程序应在32位注册表视图上运行。
尝试:
_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, (_winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS))
答案 1 :(得分:6)
您是否也在使用64位版本的Python,还是32位Python? (后者更常见。)如果你使用的是32位版本的Python,_winreg
模块默认会看到32位注册表,而regedit会显示64位注册表。您应该能够告诉_winreg
打开不同的视图;请参阅有关访问权限的_winreg
模块文档,特别是subsection on 64-bit specific flags和the MSDN article it references。不幸的是,看起来没有办法让32位进程访问64位注册表,但我可能会遗漏一些东西。