win32api.RegOpenKeyEx иногда вызывал ошибку с кодом ошибки 2 - PullRequest
0 голосов
/ 02 марта 2012

Ниже приведен мой код для чтения куста реестра.Но я встретил одну странную вещь.Иногда функция работает, иногда нет (верните код ошибки 2).Я заметил, что если я сначала использую regedit для просмотра раздела реестра, затем закрываю regedit, а затем снова запускаю скрипт, он работает.Кто-нибудь сталкивался с такой ошибкой раньше?

Ниже моя функция.

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

Я попытался закрыть все обработчики клавиш, но все еще есть некоторые проблемы.

1 Ответ

0 голосов
/ 02 марта 2012

Ошибка 2 возникает, когда ключ отсутствует, поэтому вы должны проверить в скрипте, действительно ли ключ, который вы ищете, находится там.

Кроме того, хотя использование win32api является правильным, я бы посоветовал вам использовать _winreg (winreg в python 3), поскольку он есть в стандартной библиотеке и не заставит вас добавлять зависимость win32api.

В коде возможна ошибка, если приложение QQMusic представляет собой приложение x86 на компьютере с архитектурой x64, поскольку вам также придется искать в WoW64

...