python - 在 Windows 7 上打开注册表项时出现问题

标签 python windows-7 registry

此代码过去适用于 Vista(和 Windows XP),但在升级到 Windows 7 后,它现在失败并显示错误:

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32
>>> import _winreg
>>> h1 = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)        
>>> key = r'SOFTWARE\Python\PythonCore\2.6\InstallPath'
>>> h2 = _winreg.OpenKey(h1, key, 0, _winreg.KEY_ALL_ACCESS)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
WindowsError: [Error 5] Access is denied

我相当确定这是 Windows 7 中安全模型更改的结果,但我尝试过的各种搜索都没有找到任何我可以用作答案的东西。

(不是说它应该是相关的,而是为了避免“你为什么要那样做?”的回应,这是一个开发人员的实用程序,它可以在多个 Python 安装之间切换注册表,用于多项目环境我们需要更多地控制正在使用的 Python 版本以及可用的包,而不是 virtualenv 之类的东西。)

编辑:登录用户是管理员。此外,我已尽可能完全关闭 UAC(用户访问控制)功能(不正确...请参阅下一篇编辑),就像从 Vista 升级到 Windows 之前的情况一样7.

编辑 2: 正如我在下面的回答中所指出的,关闭 UAC 后我没有重新启动,所以它仍然设置为默认值。显然,这会导致访问被拒绝错误(正如我通过将 UAC 设置为默认和从不进行测试所确认的那样)。

最佳答案

这是一个用户错误,由 Windows 7 中对 UAC 功能实现方式的更改而加剧或触发。

在 Vista 中,令人厌恶的用户访问控制功能是二进制的,可以打开或关闭。在 Windows 7 上已更改为提供四个级别的粒度:

  • 始终通知(当程序或用户试图更改设置时)
  • 默认(仅在程序尝试进​​行更改并调暗屏幕时通知)
  • 不调暗通知(与默认设置相同,但通知时不调暗屏幕)
  • 从不通知(程序或用户更改)

我的错误是在将 UAC 功能降低到从不通知级别后没有重新启动。 (Vista 主动要求您重新启动,而 Windows 7 似乎稍微被动一些。)

关于python - 在 Windows 7 上打开注册表项时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897324/

相关文章:

python - 使用 Tastypie 公开模型方法

windows - 如何在同一系统上发送 nmi

c# - 跳转列表和 Windows 窗体

Java 运行时环境 HKEY_LOCAL_MACHINE 错误

c# - 检查应用程序是否安装在注册表中

python - 无法从其他模块追加全局 NumPy 数组

python swig 字符串到 char* 的转换

ruby-on-rails - 错误 : Permission Denied @ rb_sysopen when trying to install gem pg in my rails app (Windows 7)

c# - 注册表未被 C# 应用程序修改

python - Pipenv 没有从 asdf 获取 Python 版本