2011-05-04 49 views
1

我試圖從XP註冊表中提取一些數據,包括XP計算機上的軟件配置單元和ntuser.dat。目前,我使用reg.exe加載配置單元,並使用_winreg來提取數據。我需要使用reg.exe,因爲我通過備份數據的計算機通常處於脫機狀態,我將硬盤驅動器放在外部驅動器托架中,然後從另一個Windows會話中加載配置單元。啓動要備份的計算機是不可行的,因爲它們通常會導致硬盤故障或無法啓動。Python:Windows註冊表配置單元訪問不使用註冊表API

我見過一個名爲hivex的實用程序,該實用程序在Linux下運行,該程序將c模塊與python包裝器組合在一起,以允許對Windows註冊表進行只讀(有限寫入)訪問,而無需使用Windows註冊表API。可悲的是,似乎沒有Windows版本的hivex,假設是因爲沒有人認爲需要通過直接訪問配置單元文件來訪問Windows下的Windows註冊表。

我很想放棄reg.exe的調用subprocess.Popen()的依賴關係,因爲調用外部可執行文件有許多問題,並且它使備份實用程序平臺受到限制。

有誰知道一個python模塊,它允許直接訪問配置單元文件本身?我已經知道了,目前正在使用_winreg,所以建議這樣做不會有幫助。提前致謝。

回答

1

我不知道它是多麼好,但pywin32庫提供綁定到最的Windows API。我不知道Windows API是否足以知道是否可以打開任意的配置單元文件,但可能值得快速查看(該版本包含具有完整API映射的CHM)。

+0

嗯,我想我可以使用pywin32。它看起來像我可以通過pywin32從Win32API中調用RegLoadKey。根據RegLoadKey的文檔,它可以將配置單元加載到HKU或HKLM中的特定位置。這應該大大優於通過Popen()使用reg.exe加載配置單元。我更喜歡一個跨平臺的選項,但是如果/當我需要能夠在Linux上運行該程序時,我可以實現對hivex的二次使用,因此,如果「import pywin32」拋出時使用hivex一個例外。 – dwinks 2011-05-04 21:33:31

0

難道你看看到regobj它提供了註冊表值,Python的訪問(但它仍然是基於_winreg)

+0

是的,我的需求是直接訪問蜂箱本身。 '_winreg'只允許通過Windows中的註冊表API訪問,這是'regobj'的基礎。我實際上使用'regobj',但沒有提及它,因爲它與直接使用'_winreg'沒有任何區別,除了pythonic。 – dwinks 2011-05-04 18:27:41

0

是調用外部應用程序還是使用註冊表API的問題?如果是前者,您可以使用RegLoadKey/RegUnLoadKey自行加載和卸載蜂箱。如果是後者,那麼我肯定有人寫了一個C庫來直接解析蜂箱。快速的谷歌搜索給了我微軟的Offline Registry Library

+0

我現在的問題是我通過Popen()調用reg.exe,我不喜歡這樣做。我想我會通過pywin32調用RegLoadKey,我剛剛發現了感謝Bashwork。我真的希望像hivex這樣的只有跨平臺的應用程序,所以我不需要用不同的庫/模塊實現兩次相同的功能,但是我認爲根據平臺使用pywin32和hivex是迄今爲止最好的回答我遇到過。 – dwinks 2011-05-04 21:39:04