2012-03-02 138 views
0

以下はレジストリハイブを読むための私のコードです。しかし、私は奇妙なことに出会った。場合によっては機能が動作することもあります(エラーコード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はキーが存在しない場合に発生しますので、実際に探しているキーがあることをスクリプトにチェックインする必要があります。

また、win32apiを使用している間は、標準ライブラリにあり、win32apiの依存関係を追加しないため、_winreg(python 3のwinreg)を使用するようアドバイスします。

あなたはまたはWoW64

+0

に見える必要がありますので、アプリケーションQQMusicはx64のマシンでのx86アプリケーションの場合は、コード内の可能なバグがありますが、あなたにマンデルありがとうございました。あなたが正しいです。私は誤ってregパスに\\を使用していましたが、これは\ – bettermanlu

関連する問題