2011-05-04 50 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