Prev: ActiveX control in python vs ActiveX control in vb 6 (piece of code)
Next: cx_Oracle + array parameter
From: black_13 on 28 Nov 2007 11:04 I have included a small script the reproduces the error I am having in larger script. The line 'hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name)' seems to be causing the error but im not sure why. --------------------- script ---------------- import _winreg import string def reproduce_error(): for index in xrange(_winreg.QueryInfoKey(_winreg.HKEY_LOCAL_MACHINE)[0]): #get names name = _winreg.EnumKey(_winreg.HKEY_LOCAL_MACHINE,index) hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name) print name hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARE') print hkey hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,'SAM') print hkey if __name__ == '__main__': reproduce_error() ------------------- end script ----------------------------------------- HARDWARE SAM Traceback (most recent call last): File "winreg_error.py", line 19, in <module> reproduce_error() File "winreg_error.py", line 10, in reproduce_error hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name) WindowsError: [Error 5] Access is denied
From: Jerry Hill on 28 Nov 2007 11:28 On Nov 28, 2007 11:04 AM, black_13 <jjosburn(a)gmail.com> wrote: > I have included a small script the reproduces the error I am having in > larger script. The line 'hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name)' > seems to be causing the error but im not sure why. .... > WindowsError: [Error 5] Access is denied Your user does not have permission to open the registry key you requested. On my local machine, HKEY_LOCAL_MACHINE/SECURITY is only accessible by the SYSTEM account. Even Administrative users do not have Read rights to that key by default. If you want to skip keys you don't have permission to access, you could do something like this: import _winreg for index in xrange(_winreg.QueryInfoKey(_winreg.HKEY_LOCAL_MACHINE)[0]): try: name = _winreg.EnumKey(_winreg.HKEY_LOCAL_MACHINE,index) hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name) except WindowsError: print "Could not access registry key", name else: print name, hkey -- Jerry
From: kyosohma on 28 Nov 2007 11:30
On Nov 28, 10:04 am, black_13 <jjosb...(a)gmail.com> wrote: > I have included a small script the reproduces the error I am having in > larger script. > The line 'hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name)' > seems > to be causing the error but im not sure why. > --------------------- script ---------------- > > import _winreg > import string > > def reproduce_error(): > > for index in > xrange(_winreg.QueryInfoKey(_winreg.HKEY_LOCAL_MACHINE)[0]): > #get names > name = > _winreg.EnumKey(_winreg.HKEY_LOCAL_MACHINE,index) > hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name) > print name > > hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,'SOFTWARE') > print hkey > hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,'SAM') > print hkey > > if __name__ == '__main__': > reproduce_error() > ------------------- end script > ----------------------------------------- > HARDWARE > SAM > Traceback (most recent call last): > File "winreg_error.py", line 19, in <module> > reproduce_error() > File "winreg_error.py", line 10, in reproduce_error > hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,name) > WindowsError: [Error 5] Access is denied If you move the "print name" line up one line, you'll notice that it's choking on the Security key. Go to Start --> Run and type regedit. Go to that key and right-click it and check its permissions. On my PC the only user that has complete control is the SYSTEM. So you'll probably just want to put an exception block in your function that records the keys that you can't open and continues to run. Mike |