2017-04-03 3 views
2


여러분, 안녕하세요!Windows의 Python 3에서 winreg에서 레지스트리 값이 일치하지 않는 이유는 무엇입니까?

저는 작은 python3 프로젝트를 코딩하고 있습니다. 내 코드에는 사용자가 특정 DirectX 버전을 설치했는지 여부를 확인하는 기능이 있습니다.

그 기능은 다음과 같습니다. 나는 마이크로 소프트 \ 다이렉트 \ HKEY_LOCAL_MACHINE \ 소프트웨어에서 4.07.00.0904 원래 버전 값 (4.09.00.0904)을 변경할 수 있도록

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 

나는이 기능을 테스트하고 싶었다. 그러나 그것은 효과가 없었습니다. 변수 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 비트 파이썬을 사용할 수 있기 때문에

답변

3

이 문제는,이 시도 :

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) 
관련 문제