在编辑之前使用python脚本将Windows注册表备份到文件

时间:2011-12-19 22:03:50

标签: python windows python-3.x registry

我正在尝试创建一个脚本来编辑窗口的注册表。作为后退,我想创建一个备份注册表并将其保存在工作目录(或其他一些目录中,但这是为了以后)。有没有办法使用python的强大功能来备份注册表?

到目前为止,我发现这样做的唯一方法可能是调用reg.exe,但我正在寻找python本身更本地的东西。

谢谢!

3 个答案:

答案 0 :(得分:2)

注册表是一个深度以Windows为中心的构造,虽然我没有对该主题进行任何研究,但我敢打赌,在Python中备份注册表没有“本地”方式。我认为你已经有了自己的答案并在Python中创建了一个流程并让它运行Reg Export是实现你想要的最佳方式。

但是,如果由于某种原因您不想运行Reg.exe或调用任何外部进程,我建议您在将每个注册表项编辑为.reg文件之前编写并保存它:

[HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Adobe Acrobat]
[HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Adobe Acrobat\9.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Adobe Acrobat\9.0\Installer]
"AppInit_DLLs"="acaptuser64.dll"

这种方法将确保您不依赖于任何外部实用程序,并且是最接近Python中“本机”注册表备份的东西。

答案 1 :(得分:0)

建议的方法是创建一个“还原点”,它将进行备份以恢复注册表。我不知道API是做什么的,但我很确定它存在。

当然,你也可以手动完成,但这是一个不同的问题。

答案 2 :(得分:0)

如果程序使用UAC升级,则可以使用winreg模块的SaveKey函数:

import winreg, win32security, win32api # use _winreg for older versions of Python
with winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, '') as handle: # Replace with the desired key
    win32security.AdjustTokenPrivileges(win32security.OpenProcessToken(win32api.GetCurrentProcess(), 40), 0, [(win32security.LookupPrivilegeValue(None, 'SeBackupPrivilege'), 2)]) # Basically, adjusts permissions for the interpreter to allow registry backups
    winreg.SaveKey(handle, 'C:\\REGBACKUP') # Replace with the desired file path

然后可以将其加载以与winreg库一起使用:

import winreg
with winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, '', 'C:\\REGBACKUP') as handle:
    ...