2017-04-03 8 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 

私は、Microsoft \ DirectXの \ 4.07.00.0904 でHKEY_LOCAL_MACHINE \ソフトウェアに元のバージョン値(4.09.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」の値が表示されました。

この状況は間違いありませんか?私のコードに何か問題がありますか?

私を助けてください!

答えて

3

あなたは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) 
関連する問題