为什么注册表值在 Python 3 on Windows 中的 winreg 中不匹配?

Why registry value doesn't match in winreg in Python 3 on Windows?


大家好!

我正在编写小型 python3 项目。在我的代码中,有一个函数可以检查用户是否安装了特定的 DirectX 版本。

该函数如下。

def check_directx():
    try:
        reg_obj = OpenKey(HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX')
    except FileNotFoundError:
        return False

    dx_value_str = EnumValue(reg_obj, 1)[1][0:4]
    CloseKey(reg_obj)

    if dx_value_str != "4.09":
        return False

    return True

我想测试这个功能所以我在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX中将原来的版本值(4.09.00.0904)改成了4.07.00.0904。但它没有用。变量 dx_value_str 的值仍然是 4.09.00.0904.

我搜索了注册表,发现 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectX 中有相同的键值。我改了这里的版本值,变量dx_value_str的值终于改了。

如你所见,我在'SOFTWARE\Microsoft\DirectX'中打开了密钥,但它带来了'SOFTWARE\Wow6432Node\Microsoft\DirectX'中的值。

这样的情况可以吗?还是我的代码有问题?

请帮帮我!

这个问题是因为您可能使用的是 32 位 python,试试这个:

import winreg
reg_obj = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX',0, (winreg.KEY_WOW64_64KEY+ winreg.KEY_READ))
dx_value_str = winreg.EnumValue(reg_obj, 1)[1][0:4]
print(dx_value_str)
winreg.CloseKey(reg_obj)