0

_winregとPythonを使用してWindowsレジストリを読みたい

正常に動作しますが、REG_BINARY値が表示されません...あるキーでバイナリ値を作成すると、どこでも、バイナリではなく他の値が表示されます。ウィンドウを取得するには、バイナリ情報を解析する必要があります。弊社のHW/SWエビデンスのライセンスキーです。このコードを使用したいのですが、関係ありません。

from _winreg import *
mapping = { "HKLM":HKEY_LOCAL_MACHINE, "HKCU":HKEY_CURRENT_USER, "HKU":HKEY_USERS }

def pathExists(hkey, regPath):
    try:
        reg = OpenKey(mapping[hkey], regPath)
    except WindowsError:
        return False
    CloseKey(reg)
    return True 

def readSubKeys(hkey, regPath):
    if not pathExists(hkey, regPath):
        return -1
    reg = OpenKey(mapping[hkey], regPath)
    subKeys = []
    noOfSubkeys = QueryInfoKey(reg)[0]
    for i in range(0, noOfSubkeys):
        subKeys.append(EnumKey(reg, i))
    CloseKey(reg)
    return subKeys

def readValues(hkey, regPath):
    if not pathExists(hkey, regPath):
        return -1
    reg = OpenKey(mapping[hkey], regPath)
    values = {}
    noOfValues = QueryInfoKey(reg)[1]
    for i in range(0, noOfValues):
        values[EnumValue(reg, i)[0]] = EnumValue(reg, i)[1]
    CloseKey(reg)
    return values
4

1 に答える 1

1

少し遅れましたが、今日、Python 2.7.3 で同じ問題に遭遇しました。この問題の原因は、Python が 32 ビット プロセスであるためです。Windows 64 ビット環境で実行している場合、32 ビット プロセスを呼び出して 64 ビット REG_BINARY 値を探すと、ビット数の問題が発生します。

残念ながら、_winreg を使用してこの問題を修正する方法がわかりませんでした。コマンド プロンプトの sysnative の場所を _winreg で変更するオプションはないようです。

私が使用した解決策は次のとおりです。

import subprocess
cmd = ['C:\Windows\sysnative\cmd.exe /c REG QUERY HKLM\LocationToBinaryValue /v' BinaryValueName']
subprocess_checkoutput(cmd, shell=True)

コマンドのC:\Windows\sysnative\cmd.exe /c部分は、コマンド プロンプト シェルを正しいビットに設定します。その後、通常どおり Reg Query を実行すると機能し、REG_BINARY 値の読み取りが有効になります。

于 2013-04-01T16:52:47.743 に答える