下载链接

下载链接

我的 Windows XP 注册表中有一个文件夹,我想像 Dropbox 一样在我的两台计算机之间同步。我希望每次我在一台计算机上更改注册表时,该更改都会出现在另一台计算机上。

可能吗?怎么办?

(如果您好奇我为什么要这样做:我想在所有计算机上都有相同的 PuTTY 会话。)

答案1

抱歉花了这么长时间,我想这是我写答案所花的最长时间!

很久以前,我想要非常相似的功能,但是,我找不到实现它的方法......现在我对编程有了更多的了解,我认为值得尝试做点什么。

因此,几个小时后,我给你,RegSync v1

在此处输入图片描述

只需复制完整的注册表路径(在您的情况下HKEY_CURRENT_USER\Software\SimonTatham\PuTTY)并将其粘贴到框中即可。

单击开始,它将自动监视该注册表项的任何添加、删除或更改。

如果它检测到任何更改,它将导出与应用程序运行所在的同一文件夹中的*注册表文件。regsync.reg

*如果同时有多个更改,它将在第一个更改后等待 5 秒。

当/按下开始按钮后,它将监视其所在的文件夹以查找regsync.reg文件的任何更改,如果检测到更改,它将删除您在本地选择的注册表项中的所有条目并导入注册表文件。 (请注意,它不会检查文件是否与其.Reg监视的位置匹配,因此,如果您在每台电脑上输入不同的位置,可能会出问题)。

因此...您可以从 dropbox 或 windows 共享或任何其他文件夹共享服务运行它。在两台计算机上运行它并选择要监视的注册表项。

补充说明...

  • 这需要.NET 框架版本 4。

  • 它不监视子键,您可以在不同的文件夹中运行该工具的其他副本(我已经有改进这一点的想法,但前提是人们需要该工具)。

  • 虽然它不需要 UAC 提升,但每次它尝试从注册表导入或导出时(它基本上调用regedit.exe/ reg.exe),它都会因提升而烦扰您,因此,我建议您以提升的权限运行该程序...它会多次执行此操作,并且会变得非常烦人。

  • 没有保证 - 它获得了“在我的 PC 上运行”徽章,并且我已经在几台机器上对其进行了测试,但是,它没有经过代码审查和数小时的测试......从开始到结束只需几个小时。

即使您最终没有使用它,我希望它对某些人有用!

下载链接

答案2

使用包含所需条目的注册表文件以静默模式运行 regedit.exe 可能会更简单。您可以将每台计算机设置为从共享位置运行它,这样您只需更新文件,当每台计算机上下次运行 regedit.exe 时,它​​们就会获得新条目。

就像是:

regedit.exe /S puttyentries.reg

为了从一台计算机中提取注册表项,您可以使用:

regedit.exe /E puttyentries.reg "registry_key"

可能有更优雅的方法来自动化整个过程,使用 vbscript 或 autoit 以及注册表的远程读/写功能。

下面是一个使用 AutoIt 的示例,它将每 30 分钟与远程计算机同步一次(警告,我真的没有测试过这个):

While 1 ;loop indefinitely
    $i1 = 1 ;set initial counter
    While 1 ;loops through all sessions
        $keyname = RegEnumVal("\\REMOTECOMPUTER\HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions", $i1) ;reads session names
        If @error <> 0 Then ExitLoop ;exits when no more sessions exist
        $i2 = 1 ;set initial counter
        While 1 ;loops through all value in key until done
            $valuename = RegEnumVal("\\REMOTECOMPUTER\HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions" & "\" & $keyname, $i2) ;read value name from remote machine
            If @error <> 0 Then ExitLoop ;errors and escapes when no more values to read
            $type = @extended ;sets registry value type
            $value = RegRead("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Session" & "\" & $keyname, $valuename) ;read value
            RegWrite("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Session" & "\" & $keyname, $valuename, $type, $value) ;write key value to local machine
            $i2 = $i2 + 1 ;increment by 1
        WEnd
        $i1 = $i1 + 1 ;increment by 1
    WEnd
    Sleep(1800000) ;sleep 30 min
WEnd

相关内容