You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的winreg读取Windows注册表遇PermissionError问题

解决winreg读取注册表时的PermissionError问题

问题根源

  1. 权限参数不匹配:你的代码打开注册表时用了winreg.KEY_SET_VALUE,这个权限仅允许修改注册表值,不包含读取权限,所以即使以管理员身份运行,执行读取操作时依然会触发PermissionError。
  2. 语法错误:print(valor = winreg.QueryValueEx(reg, "Start"))是无效语法,Python不允许在print函数内直接赋值。
  3. 64位系统兼容问题:如果你的Python是32位版本,运行在64位Windows上,默认会访问32位注册表分支,需要额外指定KEY_WOW64_64KEY权限才能访问HKLM下的64位注册表项。

修正后的代码

import winreg

try:
    # 打开注册表项,使用读取权限+64位系统兼容权限
    reg_key = winreg.OpenKey(
        winreg.HKEY_LOCAL_MACHINE,
        "SYSTEM\\CurrentControlSet\\Services\\USBSTOR",
        access=winreg.KEY_READ | winreg.KEY_WOW64_64KEY
    )
    # 读取"Start"值,返回值和类型
    valor, value_type = winreg.QueryValueEx(reg_key, "Start")
    print(f"Start值: {valor}, 值类型: {value_type}")
    # 关闭注册表键,释放资源
    winreg.CloseKey(reg_key)
except PermissionError:
    print("权限不足,请确认已以管理员身份运行程序")
except FileNotFoundError:
    print("未找到指定的注册表项")
except Exception as e:
    print(f"执行出错: {str(e)}")

关键说明

  • 权限参数选择:读取注册表时必须使用winreg.KEY_READ(或KEY_QUERY_VALUE,更细粒度的读取权限),如果需要同时读写,才需要组合KEY_SET_VALUE等权限。
  • 64位系统适配:KEY_WOW64_64KEY参数让32位Python程序能访问64位系统的注册表项,64位Python可以不加,但加上也不会有问题。
  • 资源释放:使用完注册表键后调用CloseKey释放系统资源,避免资源泄漏。

内容的提问来源于stack exchange,提问作者AnonymousDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:48:26