tester
tester

Reputation: 31

Python:winreg module :Windows 7:None is not valid HKEY error

I ran into issues while reading registry value for windows 7 winth winreg module .Any pointers to resolve the same?

Code :

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: ' )

Output:

[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**

Upvotes: 0

Views: 1151

Answers (1)

Santa
Santa

Reputation: 11547

This line:

ParentKey = _winreg.DisableReflectionKey(ParentKey)

will return None. The function DisableReflectionKey is not documented as returning anything (success or failure is indicated by whether or not an exception is raised). Such a function that does not return anything returns None implicitly. Since you bind the returned value to ParentKey, that variable will holds None from that point on.

So, of course the subsequent call,

_winreg.QueryValueEx(ParentKey, 'DisplayName')

will fail since QueryValueEx requires a defined key (not None) to work.

Upvotes: 1

Related Questions