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) |