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