2012-04-10 8 views
0

Ich nahm das folgende Python Rezept von Activestate.org, dann fügte ich einfach die Methode zum Löschen des Schlüssels, aber ich bekomme Fehler 5, Zugriff verweigert, und der Schlüssel, es ist nur ein falscher Schlüssel, die ich habe gerade erstellt, um die Funktion auszuprobieren. Hier ist der CodePython RegDeleteKey Fehler 5 Zugriff verweigert

## {{{ http://code.activestate.com/recipes/576860/ (r2) 
import win32api 
import win32con 

def regquerysubkeys(handle, key, keylist=[]): 

#get registry handle 
    reghandle = win32api.RegOpenKeyEx(handle, key, 0, win32con.KEY_ALL_ACCESS)  
    try: 
     i = 0 
    #enumerates subkeys and recursively calls this function again 
     while True: 
      subkey = win32api.RegEnumKey(reghandle, i) 
      #the following is the line I added myself 
      win32api.RegDeleteKey(handle, key) 


      i += 1 
     #braintwister here ;-) 
      regquerysubkeys(handle, key + subkey + "\\", keylist) 
    except win32api.error as ex: 
     #If no more subkeys can be found, we can append ourself 
     if ex[0] == 259: 
      keylist.append(key) 
     #unexpected exception is raised 
     else: 
      raise 
    finally: 
    #do some cleanup and close the handle 
     win32api.RegCloseKey(reghandle) 
#returns the generated list 
    print keylist 

#call to the function 
regquerysubkeys(win32con.HKEY_LOCAL_MACHINE, "SOFTWARE\\suga\\") 

Das sind die Fehler, die ich in der Konsole bekomme.

Traceback (most recent call last): 
File "C:\EclipseWorkspaces\csse120\MMS-auto\test1.py", line 34, in <module> 
regquerysubkeys(win32con.HKEY_LOCAL_MACHINE, "SOFTWARE\\suga\\") 
File "C:\EclipseWorkspaces\csse120\MMS-auto\test1.py", line 14, in regquerysubkeys 
win32api.RegDeleteKey(handle, key) 
pywintypes.error: (5, 'RegDeleteKey', 'Access is denied.') 

Kann mir jemand dabei helfen?

Antwort

0

Laufen Sie zufällig 64-Bit Windows 7? In der Struktur der Registrierung wurden einige Änderungen vorgenommen, um die Ausführung von 32-Bit- und 64-Bit-Programmen zu berücksichtigen, für die Sie unterschiedliche APIs zum Löschen verwenden müssen. The RegDeleteKey Win32 API documentation erwähnt in einigen Fällen mit RegDeleteKeyEx. Die Win32-API ist schwer zuverlässig von einer Hauptversion von Windows zur nächsten zu verwenden. Leider tut pywin32 sein Bestes, um einige der Kopfschmerzen zu verbergen, aber es erfordert immer noch, dass Sie die Win32-API und ihre Vorbehalte wirklich kennen, bevor Sie sie effektiv nutzen können.

+0

Ich habe gelesen, dass in der Dokumentation, aber ich windowXp 32bit laufen, daher ich sollte ich nicht diese Art von Problem haben. – nassio

+0

Seltsam, aber Antivirensoftware abschalten das gleiche Problem in meinem Fall beheben. –