Ram*_*hum 9 windows windows-registry sync windows-xp
在我的 Windows XP 注册表中有一个特定的文件夹,我希望在我的两台计算机之间同步,Dropbox 风格。我希望它的方式是每次我在一台计算机上进行注册表更改时,它都会出现在其他计算机上。
可能的?如何?
(如果您对我为什么要这样做感到好奇:我希望在所有计算机上都有相同的 PuTTY 会话。)
抱歉拖了这么久,我想这是我写答案所用时间最长的一次!
很久以前,我想要非常相似的功能,但是,我找不到做它的方法……现在我知道更多的编程,我认为值得尝试做一些事情。
所以,几个小时后,我给你,RegSync v1。

只需复制完整的注册表路径(在您的情况下HKEY_CURRENT_USER\Software\SimonTatham\PuTTY)并将其粘贴到框中。
单击开始,它将自动监视该注册表项的任何添加、删除或更改。
如果它检测到任何更改,它将*导出regsync.reg在应用程序运行的同一文件夹中调用的注册表文件。
* 如果一次有多个更改,它将在第一次更改后等待 5 秒。
当/按下开始按钮后,它将监视它所在的文件夹是否有任何更改regsync.reg,如果检测到更改,它将删除您在本地选择的注册表项中的所有条目并导入注册表文件。(请注意,它不会检查.Reg文件是否与它正在监视的位置匹配,因此,如果您在每台电脑上键入不同的位置,它可能会出错)。
所以...您可以从 dropbox 或 windows 共享或任何其他文件夹共享服务运行它。在两台计算机上运行它并选择要监视的注册表项。
补充说明...
这需要 .NET 框架版本 4。
它不监视子项,您可以在不同的文件夹中运行该工具的其他副本(我已经有了改进这一点的想法,但前提是人们需要该工具)。
虽然它不需要 UAC 提升,但它每次尝试从注册表导入或导出时都会让您感到提升(它基本上调用regedit.exe/ reg.exe),因此,我建议您运行提升的程序......它会这样做几次它会变得非常烦人。
没有保证 - 它获得了“在我的 PC 上工作”的标志,我已经在几台机器上对其进行了测试,但是,这还没有进行代码审查和数小时的测试......在几个小时内开始完成。
即使你最终没有使用它,我希望它对那里的人有用!
使用包含您想要的确切条目的注册表文件以静默模式运行 regedit.exe 可能会更容易。您可以将每台计算机设置为从共享位置运行它,因此您需要做的就是更新文件,当 regedit.exe 的下一次计划运行在每台计算机上运行时,它们将获得新条目。
就像是:
regedit.exe /S puttyentries.reg
Run Code Online (Sandbox Code Playgroud)
为了从一台计算机中提取注册表项,您可以使用:
regedit.exe /E puttyentries.reg "registry_key"
Run Code Online (Sandbox Code Playgroud)
可能会有更优雅的方法使用 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
Run Code Online (Sandbox Code Playgroud)