Почему значение реестра не совпадает в winreg в Python 3 в 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

Я хотел протестировать эту функцию, поэтому я изменил исходное значение версии (4.09.00.0904) на 4.07.00.0904 в HKEY_LOCAL_MACHINE \ SOFTWARE \Microsoft\DirectX. Но это не сработало. Значение переменной dx_value_str по-прежнему составляло 4.09.00.0904.

Я искал в реестре и обнаружил, что есть тот же ключ, значение в HKEY_LOCAL_MACHINE \ SOFTWARE \Wow6432Node\Microsoft\DirectX. Я изменил значение версии здесь, значение переменной dx_value_str наконец изменилось.

Как видите, я открыл ключ в "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \Microsoft\DirectX", но он принес значение в "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \Wow6432Node\Microsoft\DirectX".

С этой ситуацией все в порядке? или что-то не так в моем коде?

Пожалуйста, помогите мне!

1 ответ

Решение

Эта проблема заключается в том, что вы можете использовать 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)
Другие вопросы по тегам