当前位置: 首页 > 面试题库 >

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

衡高寒
2023-03-14
问题内容

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

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位html" target="_blank">应用程序将仅看到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.
        '''

有关更多信息,请查看“访问备用注册表视图”。



 类似资料:
  • 这是错误: 照明\数据库\查询异常SQLSTATE[42S22]:找不到列: 1054未知列"在'where子句'(SQL:选择计数(*)作为聚合从在哪里"=user@email.com) 我的Resgister控制器: }我的用户表迁移:

  • 问题内容: 当我尝试在命令提示符下使用Java进行任何操作时,都会出现此错误: 几天前,我确实删除了Java目录和注册表。我重新启动计算机,但Java仍能正常工作,然后今天又重新启动了它,现在出现此错误。我尝试卸载并重新安装,但这似乎不起作用。我安装了最新的Java JRE,并在环境变量中设置了路径。任何人都知道如何解决此问题? 问题答案: 确保删除所有文件并且从你的文件夹中删除,并且如果你使用的

  • 问题内容: 尝试这样做并遇到很多两种类型的错误: 第一:500 当我在浏览器中访问这些URL时,收到以下消息: 内部路由错误 抱歉,我们无法连接到目标服务器。 我们刚刚收到有关此问题的通知。我们将尽快更正。 如有任何疑问,请随时与我们联系:support@iriscouch.com 第二名:503 当我在浏览器中访问这些URL时,收到以下消息: 错误503后端读取错误 后端读取错误 大师冥想: X

  • 我正在学习关于forge的教程,该教程来自forge 1.10,我正在编写1.12版本的代码,但遇到了一个错误。 错误: 代码:

  • 问题内容: 我正在公司网络上工作。 尝试安装但是我一次又一次收到此错误。 也尝试过此操作: 仍然出现相同的错误。 问题答案: 尝试的事情: 确保您可以连接互联网: 确保您的DNS解析器正常工作: 确保您可以访问Registry.npmjs.org: 确保您可以通过https连接。 在浏览器中尝试:https : //registry.npmjs.org/ 确保您尝试连接到: 而不是: 或其他由少量

  • Java . lang . illegalstateexception:在org . spring framework . web . servlet . support . bind status .(bind status . Java:153)~[spring-web MVC-5 . 3 . 13 . jar:5 . 3 . 13]在org . spring framework . web

  • 我正在我的xamarin.forms项目中使用xam.plugin.pushnotification 我的主要活动 我pcl里的倾听者 } 在app.cs(PCL)中注册(尝试LOL) 我在尝试注册后收到这个错误……(在onerror方法中) Java。IO.IOException:系统中的无效参数。runtime . exception services . exceptiondispatchi

  • 问题内容: 当我运行时:C:\ Users \ ashahria \ Downloads> java -jar schemaSpy_5.0.0.jar 我得到下面的错误。怎么了?我该如何解决? 错误:注册表项’Software \ JavaSoft \ Java Runtime Environment’\ CurrentVersion’ 的值为“ 1.5”,但必须为“ 1.7”。 错误:找不到ja