我的 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