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

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

大家好!

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

该功能如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
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,试试这个:

1
2
3
4
5
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)