2016-07-05 4 views
1

python 스크립트를 통해 특정 레지스트리 키를 삭제하려고합니다. [오류 5] 액세스를 거부 :
내가 아무런 문제 읽고 "HKEY_CURRENT_USER"에서 키를 삭제하지만, "HKEY_LOCAL_MACHINE"에서 동일한 작업을 수행하려고이 없다, 나에게 지칠대로 지친 WindowsError을 제공합니다.
관리자 권한으로 IDLE IDE를 통해 스크립트를 실행하고 있습니다.
python : HKLM에서 레지스트리 키 (및 하위 키)를 삭제하는 방법 (오류 5 발생)

from _winreg import *  
ConnectRegistry(None,HKEY_LOCAL_MACHINE) 
OpenKey(HKEY_LOCAL_MACHINE,r'software\wow6432node\App',0,KEY_ALL_ACCESS) 
DeleteKey(OpenKey(HKEY_LOCAL_MACHINE,r'software\wow6432node'),'App') 
+0

당신은 동일한 사용자로부터'regedit'를 사용하여 해당 키를 삭제할 수 있습니까? – cdarke

+0

@cdarke - 예. 'regedit'을 열면 admin으로 실행됩니다 (UAC 대화 상자가 나타납니다). 원하는 키로 이동하여 삭제할 수 있으며 하위 키와 함께 삭제할 수 있습니다. 스크립트의 문제는 'software \ wow6432node \ App'에 추가 하위 키가 포함되어 있기 때문에 실패 할 수 있습니다. –

답변

0

이 그것을 알아 냈 :
여기에 코드입니다!
레지스트리 키가 비어 있지 않으며 여러 하위 키가 포함되어 있습니다.
먼저 하위 키를 열거하고 삭제해야만 HKLM에서 주 키를 삭제할 수있었습니다. ("try ... except"를 추가하여 전체 코드를 손상시키지 않으므로 문제가있는 경우).

0

키를 삭제하기 전에 모든 하위 키를 제거해야합니다. 여기

def deleteSubkey(key0, key1, key2=""): 
    import _winreg 
    if key2=="": 
     currentkey = key1 
    else: 
     currentkey = key1+ "\\" +key2 

    open_key = _winreg.OpenKey(key0, currentkey ,0,_winreg.KEY_ALL_ACCESS) 
    infokey = _winreg.QueryInfoKey(open_key) 
    for x in range(0, infokey[0]): 
     #NOTE:: This code is to delete the key and all subkeys. 
     # If you just want to walk through them, then 
     # you should pass x to EnumKey. subkey = _winreg.EnumKey(open_key, x) 
     # Deleting the subkey will change the SubKey count used by EnumKey. 
     # We must always pass 0 to EnumKey so we 
     # always get back the new first SubKey. 
     subkey = _winreg.EnumKey(open_key, 0) 
     try: 
      _winreg.DeleteKey(open_key, subkey) 
      print "Removed %s\\%s " % (currentkey, subkey) 
     except: 
      deleteSubkey(key0, currentkey, subkey) 
      # no extra delete here since each call 
      #to deleteSubkey will try to delete itself when its empty. 

    _winreg.DeleteKey(open_key,"") 
    open_key.Close() 
    print "Removed %s" % (currentkey) 
    return 

는 당신이 그것을 실행하는 방법입니다

deleteSubkey(_winreg.HKEY_CURRENT_USER, "software\\wow6432node", "App") 
deleteSubkey(_winreg.HKEY_CURRENT_USER, "software\\wow6432node\\App") 
관련 문제