11

我正在尝试访问 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\...etc...”子路径是“不可见的”或不存在的)。现在我打开了注册表编辑器,我保证在 HKLM 中有这样的路径。我在 Windows 7 64 位。知道我做错了什么吗?这让我发疯了。谢谢...

4

2 回答 2

11

您需要将访问密钥与 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))
于 2013-05-29T00:11:59.493 回答
6

您还使用 64 位版本的 Python,还是 32 位 Python?(后者更常见。)如果您使用的是 32 位版本的 Python,该_winreg模块将默认看到 32 位注册表,而 regedit 将显示 64 位注册表。您应该能够告诉_winreg打开不同的视图;请参阅_winreg有关访问权限的模块文档,特别是有关 64 位特定标志的小节及其引用的 MSDN 文章。不幸的是,32 位进程似乎没有办法访问 64 位注册表,但我可能遗漏了一些东西。

于 2012-02-19T12:32:27.560 回答