2012-03-02 3 views
0

다음은 레지스트리 하이브를 읽는 데 필요한 코드입니다. 그러나 나는 이상한 것을 만났다. 때로는 함수가 작동하지 않는 경우가 있습니다 (return error code 2). 레지스트리 키를보기 위해 regedit를 사용하면 regedit를 닫은 다음 스크립트를 다시 실행하면 작동하는 것으로 나타났습니다. 누구든지 전에 그런 오류를 만났습니까?win32api.RegOpenKeyEx가 오류 코드 2와 함께 실패했습니다.

다음은 제 기능입니다.

def _getMusicRegistryValue(self, keyName): 
    value = "" 
    aKey = None 
    try: 
     HKLMKey = win32api.RegConnectRegistry(None, win32con.HKEY_LOCAL_MACHINE) 
     qqMusic = r"SOFTWARE\\Tencent\\QQMusic" 
     aKey = win32api.RegOpenKeyEx(HKLMKey, qqMusic) 
     #print 'aKey = ',aKey 
     (value,valueType) = win32api.RegQueryValueEx(aKey, keyName) 
     #installPath = "%sQQMusic.exe" %install 
     #print installPath 
    except Exception as data: 
     self.logger.error('*FAIL*: Exception happened when reading registry hive.Exception details: %s' %data) 
     errMsg = win32api.FormatMessage(data[0]) 
     self.logger.error(errMsg) 
     #raise Exception("Read registry failed, QQMusic is not installed.") 
    finally: 
     if aKey is not None: 
      win32api.RegCloseKey(aKey) 
      #print 'close key' 
     if HKLMKey is not None:    
      win32api.RegCloseKey(HKLMKey) 
    return value 

모든 키 처리기를 닫으려고했으나 여전히 문제가 있습니다.

답변

0

키 2가 없을 때 오류 2가 발생하므로 스크립트에서 실제로 찾고있는 키가 있는지 체크인해야합니다.

또한 win32api를 사용하는 동안 표준 라이브러리에 있고 win32api 종속성을 추가하지 않으므로 _winreg (python 3에서 winreg)를 사용하는 것이 좋습니다. 응용 프로그램 QQMusic 당신이 또한하면 WoW64

+0

는 만델 감사에보고해야합니다 이후의 x64 머신에서 86 응용 프로그램 인 경우

코드의 버그에 있습니다. 당신 말이 맞아요. 나는 \\ reg 경로에 실수로 \를 사용했다. – bettermanlu

관련 문제