从 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_64KEY
为0x0100
,KEY_WOW64_32KEY
为0x0200
。 _winreg
模块的 Python 2.4 版本应该支持将标志传递给 OpenKey
函数。相关的docs 没有明确提及CreateKeyEx
和DeleteKeyEx
函数(传递标志所需的函数),但前者在页面底部提到,因此它们可能存在但未记录。以上是关于从 32 位 Python 更改 64 位注册表的主要内容,如果未能解决你的问题,请参考以下文章