从 32 位 Python 更改 64 位注册表

Posted

技术标签:

【中文标题】从 32 位 Python 更改 64 位注册表【英文标题】:Change 64bit Registry from 32bit Python 【发布时间】:2012-01-20 08:31:42 【问题描述】:

我很难理解这一点。如果我是正确的,32 位 Python 无法运行代码并在 64 位中更改注册表值。我做对了吗?或者是否有一个可以启用此功能的开关?

有这个: http://msdn.microsoft.com/en-us/library/aa384129%28v=VS.85%29.aspx

但是如何将它与以下代码一起使用? http://www.blog.pythonlibrary.org/2010/03/20/pythons-_winreg-editing-the-windows-registry/

谢谢, 盎司

【问题讨论】:

【参考方案1】:

正如您链接到的 MSDN 文章所解释的,64 位 Windows 有两个注册表视图,一个用于 32 位,一个用于 64 位。默认情况下,32 位应用程序(例如,由 32 位 Python 解释器执行的 Python 脚本)将访问 32 位视图。您可以使用 MSDN 文章中提到的标志强制它访问 64 位视图。为了能够使用这些标志,您需要使用正确的参数调用_winreg.OpenKey_winreg.CreateKeyEx_winreg.DeleteKeyEx,例如

handle = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, "your_sub_key", 0, _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY)

请参阅_winreg documentation 了解更多信息。

【讨论】:

如果我这样做:_winreg.KEY_WOW64_64KEY 我得到一个错误:'module'object has no attribute 'KEY_WOW64_WOW' 您使用的是哪个 Python 版本?我可以在_winreg 2.7 docs 中找到KEY_WOW64_64KEY,但在_winreg 2.6 docs 中找不到。也许这就是问题所在? 尝试直接使用常量的值:根据MSDN,KEY_WOW64_64KEY0x0100KEY_WOW64_32KEY0x0200_winreg 模块的 Python 2.4 版本应该支持将标志传递给 OpenKey 函数。相关的docs 没有明确提及CreateKeyExDeleteKeyEx 函数(传递标志所需的函数),但前者在页面底部提到,因此它们可能存在但未记录。

以上是关于从 32 位 Python 更改 64 位注册表的主要内容,如果未能解决你的问题,请参考以下文章

如何从 32 位进程读取 64 位注册表项?

从 32 位应用程序读取 64 位注册表

vbscript 从32位应用程序读取和写入64位注册表

64位系统下注册32位dll文件

从系统(SysWOW64)目录外部注册 32 位 COM 时出现问题

从 32 位到 64 位