Python _winreg困扰

时间:2012-02-19 12:00:54

标签: python winreg

我正在尝试访问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上。知道我做错了什么吗?这让我疯了。感谢...

2 个答案:

答案 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 flagsthe MSDN article it references。不幸的是,看起来没有办法让32位进程访问64位注册表,但我可能会遗漏一些东西。