winreg.OpenKey 对现有注册表项抛出 filenotfound 错误

2023-11-22

我在读取由我的软件创建的注册表项时遇到困难。然而,使用相同的代码,我可以读取其他密钥。

installdir = winreg.OpenKey(
                            winreg.HKEY_LOCAL_MACHINE, 
                            "SOFTWARE\\Microsoft\\MediaPlayer\\Player\\Extensions\\Types"
                            ) #this works perfect
#installdir1 = winreg.OpenKey(
                              winreg.HKEY_LOCAL_MACHINE,
                             "SOFTWARE\\MySoftware\\MyEvent\\IS"
                             ) #this gives Filenotfound error

# list values owned by this registry key
try:
    i = 0
    while 1:
        name, value, type = winreg.EnumValue(installdir, i)
        print (repr(name))
        i += 1
except WindowsError:
    print ("Bot donf")
value, type = winreg.QueryValueEx(installdir, "10")
print("user is", repr(value))

value, type = winreg.QueryValueEx(winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\MySoftware\\MyEvent\\IS"), "v2")
print("user is", repr(value))

回溯显示

 Traceback (most recent call last):
  File "D:/python_scripts/myclass.py", line 32, in <module>
    value, type = winreg.QueryValueEx(winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\MySoftware\\MyEvent\\IS"), "v2")
  FileNotFoundError: [WinError 2] The system cannot find the file specified

但是 Windows reg 查询能够检索设置的值。

#reg query HKLM\SOFTWARE\MySoftware\MyEvent\IS /v v2

HKEY_LOCAL_MACHINE\SOFTWARE\MySoftware\MyEvent\IS
v2    REG_DWORD    0x12

任何帮助将不胜感激


注册表有 2 个视图。有 32 位注册表视图和 64 位注册表视图。默认情况下,在大多数情况下,32 位应用程序将仅看到 32 位注册表视图,而 64 位应用程序将仅看到 64 位注册表视图。

可以使用 KEY_WOW64_64KEY 或 KEY_WOW64_32KEY 访问标志来访问另一个视图。

如果您运行的是 32 位 python 并且您的密钥是 64 位注册表视图的一部分,则应该使用类似以下内容来打开您的密钥:

winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\MySoftware\\MyEvent\\IS", access=winreg.KEY_READ | winreg.KEY_WOW64_64KEY)

如果您运行的是 64 位 python 并且您的密钥是 32 位注册表视图的一部分,则应该使用类似以下内容来打开您的密钥:

winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\MySoftware\\MyEvent\\IS", access=winreg.KEY_READ | winreg.KEY_WOW64_32KEY)

如果您知道键始终是同一视图的一部分,请添加正确的KEY_WOW64_*访问标志将确保无论您的 python 架构是什么,它都能正常工作。

在最一般的情况下,如果您有可变的 python 架构,并且您事先不知道密钥在哪个视图中,则可以尝试在当前视图中查找密钥,然后尝试其他视图。它可能看起来像这样:

try:
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\MySoftware\\MyEvent\\IS")
except FileNotFoundError:
    import platform

    bitness = platform.architecture()[0]
    if bitness == '32bit':
        other_view_flag = winreg.KEY_WOW64_64KEY
    elif bitness == '64bit':
        other_view_flag = winreg.KEY_WOW64_32KEY

    try:
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\MySoftware\\MyEvent\\IS", access=winreg.KEY_READ | other_view_flag)
    except FileNotFoundError:
        '''
        We really could not find the key in both views.
        '''

欲了解更多信息,请查看访问备用注册表视图.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

winreg.OpenKey 对现有注册表项抛出 filenotfound 错误 的相关文章

随机推荐

  • maven:bash mvn 权限被拒绝

    这就是我所看到的 mvn bash usr local apache maven apache maven 3 1 1 bin mvn Permission denied 我的 bash 文件 if f etc bashrc then et
  • 确定互联网连接是否可用

    我知道我不是第一个问这个问题的人 我如何知道我的申请是否在线 我找到了这个帖子 堆栈溢出 我想用 C 和 NET 3 5 来实现 建议定期对资源执行 ping 操作 我对这个建议不太满意 我宁愿检测网络更改 然后 ping 我的服务以检查它
  • 将文件从远程 url 流式传输到 Django 视图响应

    有没有办法使用 Django Response 从远程 URL 流式传输文件 无需在本地下载文件 view py def file recover request args kwargs file url http remote file
  • R Caret 包中的逻辑回归调整参数网格?

    我正在尝试使用 R 来拟合逻辑回归模型caret package 我做了以下事情 model lt train dec var data vars method glm family binomial trControl ctrl tune
  • SlickGrid 中的单元格工具提示

    我的 SlickGrid 表格中的一些单元格有myClass class 我为他们添加了一个工具提示 如下所示 myClass hover Mouse enters function e Mouse leaves function 它工作正
  • 在 Kubernetes 中,如何在服务选择器中按名称选择 pod?

    我希望启动特定数量的独立且不负载平衡的 Pod 目的是使用它们向某些外部端点发送和接收某些流量 我计划执行此操作的方法是显式创建 Pod yaml 片段如下 apiVersion v1 kind Pod metadata name gene
  • 禁用 ios 上 html canvas 绘图的滚动/滑动操作

    我有一个html画布使用鼠标和触摸事件在其上绘图 我使用CSS触摸动作 无画布上的样式以禁用绘图时在设备上滚动 然而它只适用于非 IOS 设备 在 IOS 设备上的任何浏览器上 它仍然会执行滚动 滑动操作 并且很难正确绘制 这几乎就像是 I
  • 井字游戏策略缩减

    我决定编写一个解决 TicTacToe 问题的小程序 以便在一个简单的游戏上尝试一些修剪技术的效果 使用极小极大法解决该问题的完整博弈树最终只有 549 946 种可能的博弈 通过 alpha beta 剪枝 需要评估的状态数量减少到 18
  • 从 HttpURLConnection 对象解析 JSON

    我正在使用以下命令进行基本的 http 身份验证HttpURLConnectionJava 中的对象 URL urlUse new URL url HttpURLConnection conn null conn HttpURLConnec
  • 在有限的 16 字节字符串上将 IEEE 754-1985 双写为 ASCII

    这是我的后续原帖 但为了清楚起见 我会重复一遍 根据 DICOM 标准 可以使用十进制字符串的值表示来存储浮点类型 看表 6 2 1 DICOM 值表示 十进制字符串 表示固定数字的字符串 点数或浮点数 固定点数应 仅包含字符 0 9 并带
  • MS Access 中的 VBA + 线程 [重复]

    这个问题在这里已经有答案了 如何在 MS Access VBA 中创建在单独线程上运行的进程 我想创建一个只等待消息的流程 您可能想查看此解决方法 http www excelhero com blog 2010 05 multi thre
  • 为传入短信注册广播接收器

    如何注册 BroadcastReceiver 以阻止传入短信 IntentFilter intentFilter new IntentFilter Intent what should be here ctx registerReceive
  • Qt Designer 中的自定义布局

    无论如何 我们是否可以拥有自定义布局 例如定义为https doc qt io archives qt 4 7 examples layouts html 在 Qt 设计器内 在 Qt Designer 中添加此类自定义布局的过程是什么 任
  • 如何使用 matplotlib 绘制 .txt 文件中的数据?

    我想使用 matplotlib 绘制 txt 文件 但我不断收到此错误消息 我对 python 不太熟悉 因为我几周前开始学习 文本文件的格式如下 长 2048 行 6876 593750 1 6876 302246 1 6876 0034
  • 矩阵列表的元素均值[重复]

    这个问题在这里已经有答案了 假设您有矩阵列表 逐个元素计算平均矩阵的最方便的方法是什么 假设我们有一个矩阵列表 gt A lt matrix c 1 9 3 3 gt A 1 2 3 1 1 4 7 2 2 5 8 3 3 6 9 gt B
  • 从匿名方法调用带有 ref 或 out 参数的方法 [重复]

    这个问题在这里已经有答案了 这个问题与前几天我问过我从中得到了一些很好的有用的答案 我需要以通用方式调用具有不同签名的各种 Web 方法 我希望能够将 Web 方法传递给具有委托参数的方法 但我不确定如何处理不同的签名 解决方案是使用 la
  • NHibernate QueryOver 子查询

    我看过类似的问题 但找不到简单的解释 我可能会错过 但我保证我看了 事实上 除了一篇博文快速地概述了所有内容并假设您熟悉其他形式的 NH 之外 我什至找不到其他文档 给定之间的多对多Program and Topic 其中后者位于以下层次结
  • 如何以编程方式获取当前的跟踪开关?

    In my web config I have
  • Android:重定向拨出电话

    我试图将拨出电话重定向至其他电话号码在 Android 设备上 因此 我使用 BroadcastReceiver 监听 NEW OUTGOING CALL 意图 在他的 onReceive 方法上我使用 setResultData 方法来更
  • winreg.OpenKey 对现有注册表项抛出 filenotfound 错误

    我在读取由我的软件创建的注册表项时遇到困难 然而 使用相同的代码 我可以读取其他密钥 installdir winreg OpenKey winreg HKEY LOCAL MACHINE SOFTWARE Microsoft MediaP