2012-03-02 256 views
0

下面是我的代碼來讀取註冊表配置單元。但我遇到了一件奇怪的事情。有時功能起作用,有時不起作用(返回錯誤代碼2)。我注意到,如果我使用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發生,當他們的鑰匙不存在,所以你應該檢查腳本確實你正在尋找的鑰匙在那裏。

此外,雖然使用win32api是正確的,我會建議你使用_winreg(在Python 3中的winreg),因爲它在標準庫中,並且不會讓你添加win32api依賴項。

有代碼中的一個可能的錯誤,如果應用程序QQMusic是在64位機的86應用程序,因爲你將不得不也看在了WoW64

+0

謝謝曼德爾。你是對的。我錯誤地使用了\\在reg路徑中,這應該是\ – bettermanlu 2012-03-06 05:13:16

相關問題