2017-04-03 50 views
2


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

我正在编写小型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改变了原来的版本值(4.09.00.0904)到4.07.00.0904 \微软\的DirectX。但它没有奏效。变量dx_value_str的值仍然是4.09.00.0904。

我搜索了注册表,发现有相同的密钥,值为HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ DirectX。我改变了这里的版本值,变量dx_value_str的值最后被改变了。如您所见,我在'SOFTWARE \ Microsoft \ DirectX'中打开了该键,但它在'SOFTWARE \ Wow6432Node \ Microsoft \ DirectX'中带来了该值。

这种情况可以吗?或者我的代码有问题?

请帮帮我!

回答

3

这个问题,因为你可能会使用32位的蟒蛇,试试这个:

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) 
相关问题