2011-06-20 25 views
0

我在讀取windows 7 winwin winreg模塊的註冊表值時遇到問題。任何解析相同的指針?Python:winreg模塊:Windows 7:無有效無效HKEY錯誤

代碼:

try: 
    ParentKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall") 
    i = 0 
    while 1: 
     name, value, type = _winreg.EnumValue(ParentKey, i) 
     print repr(name), 
     i += 1 

except Exception as e: 
    print(Exception(e)) 

ParentKey =_winreg.DisableReflectionKey(ParentKey)  
temp = _winreg.QueryValueEx(ParentKey, 'DisplayName') 
temp1 = _winreg.QueryValueEx(ParentKey, 'DisplayVersion') 
temp2 = _winreg.QueryValueEx(ParentKey, 'Publisher') 
temp3 = _winreg.QueryValueEx(ParentKey, 'InstallLocation') 

display = str(temp[0]) 
display_ver=str(temp1[0]) 
display_p=str(temp2[0]) 
display_loc=str(temp3) 
print ('Display Name: ' + display + '\nDisplay version: ' + display_ver + '\nVendor/Publisher: ' + display_p +'\nRegkey: ' + display_loc +'\nInstall Location: ') 

輸出:

[Error 259] No more data is available 
Traceback (most recent call last): 
    File "C:\Users\Test\workspace\Pythontests\src\test.py", line 24, in <module> 
    temp = _winreg.QueryValueEx(ParentKey, 'DisplayName') 
TypeError: None is not a valid HKEY in this context 
**strong text** 

回答

1

這條線:

ParentKey = _winreg.DisableReflectionKey(ParentKey) 

將返回None。函數DisableReflectionKey沒有記錄爲返回任何內容(成功或失敗由是否引發異常來指示)。這種不返回任何內容的函數隱式返回None。由於您將返回的值綁定到ParentKey,因此該變量將從該點起持有None

所以,當然隨後的電話,

_winreg.QueryValueEx(ParentKey, 'DisplayName') 

會因爲QueryValueEx需要定義鍵(不None)工作失敗。

+0

感謝聖誕老人的投入。 – tester