Python_winreg的困境

Python_winreg的困境,python,winreg,Python,Winreg,我正在尝试访问windows注册表(Python)以使用\u winreg查询键值,但无法使其正常工作。下一行返回WindowsError,表示“系统找不到指定的文件”: 经过数小时的尝试,Python似乎看不到路径的“Maya”部分以外的内容(看起来像“2012\…等…”子路径“不可见”或不存在)。现在我打开了注册表编辑器,我保证在HKLM中有这样一个路径。我使用的是64位Windows 7。知道我做错了什么吗?这让我快发疯了。谢谢……您是否也在使用64位版本的Python,还是32位版本的P

我正在尝试访问windows注册表(Python)以使用\u winreg查询键值,但无法使其正常工作。下一行返回WindowsError,表示“系统找不到指定的文件”:


经过数小时的尝试,Python似乎看不到路径的“Maya”部分以外的内容(看起来像“2012\…等…”子路径“不可见”或不存在)。现在我打开了注册表编辑器,我保证在HKLM中有这样一个路径。我使用的是64位Windows 7。知道我做错了什么吗?这让我快发疯了。谢谢……

您是否也在使用64位版本的Python,还是32位版本的Python?(后者更常见。)如果使用32位版本的Python,默认情况下,
\u winreg
模块将看到32位注册表,而regedit将显示64位注册表。您应该能够告诉
\u winreg
打开不同的视图;请参阅有关访问权限的
\u winreg
模块文档,特别是和。不幸的是,32位进程似乎没有办法访问64位注册表,但我可能遗漏了一些内容。

您需要将访问键与其中一个64位访问键组合起来

_winreg.KEY\u WOW64\u 64KEY 指示64位Windows上的应用程序应在64位注册表视图上运行

_winreg.KEY\u WOW64\u 32KEY 指示64位Windows上的应用程序应在32位注册表视图上运行

尝试:


谢谢你的回复。当我检查我的Python版本时(使用sys.version_info),它会显示(2,6,4,‘final’,0)。但我看不到任何64位或32位的信息。另一件事是我不知道在哪里使用“KEY_WOW64_64KEY”部分。我知道,我可能听起来很可怜,但我确实需要帮助……你在
sys.version\u info
中看不到32位与64位的对比,但你可以在
sys.version
中看到它(里面会说“32位”或“64位”)。你也可以看看
platform.architecture()
。至于以不同的方式打开注册表,正如我所说的,我不相信您可以从32位进程访问64位注册表,而您可以从64位进程访问64位注册表。然而,我可能错了;我从来没有在32位注册表访问方面做过很多工作。@ThomasWouters:我也无法在Windows 7 64位和python 2.7.3(默认值,2012年4月10日,23:24:47)[MSC v.1500 64位(AMD64)]上用
\u winreg
读取注册表项。我得到了与@user1219144相同的错误,系统无法找到指定的文件。为了测试这一点,我将其用于测试用例。我看到的行为:第一次运行正常;第二次运行正常;重新启动后出错。调试:尝试以管理员身份运行IDLE,方法是将
启动C:\Python27\pythonw.exe C:\Python27\Lib\idlelib\IDLE.py
放入.bat文件,右键单击该文件,然后选择以管理员身份运行。。。然后打开
WindowsRegistry.py
类,按运行测试用例F5@TrinitronX:我无法在Windows 7 64位和python 2.7.3(64位)上使用_winreg读取系统上的任何“HKEY_LOCAL_MACHINE”键。像
\u winreg.OpenKey(\u winreg.HKEY\u LOCAL\u MACHINE,“\SOFTWARE\Microsoft\Microsoft SDKs\Windows”)
这样简单的东西不起作用。我也尝试了所有可能的魔兽世界标志。在工作系统和家庭系统上进行了尝试。用Python3.3试过了。我不知道出了什么问题。如果我尝试访问HKEY_CLASSES_根目录,效果很好。你解决了这个问题吗?我想是的。老实说,我不记得我最后是怎么做的。也许我绕过了这个问题。很抱歉,我无法提供更多帮助…我遇到了无法枚举子密钥的问题。像你说的那样添加密钥解决了我的问题。非常感谢。
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, _winreg.KEY_ALL_ACCESS)
_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, (_winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS))