9

В моем реестре Windows XP есть определенная папка, которую я хочу синхронизировать между двумя компьютерами в стиле Dropbox. Я хочу, чтобы каждый раз, когда я вносил изменения в реестр на одном компьютере, он появлялся на другом (их) компьютере.

Возможный? Как?

(Если вам интересно, почему я хочу это сделать: я хочу, чтобы на всех компьютерах проводились одинаковые сессии PuTTY.)

2 ответа2

6

Извините, что так долго, я думаю, что это самое длинное, что я взял, чтобы написать ответ!

Когда-то я хотел очень похожую функциональность, но я не мог найти способ сделать это ... теперь, когда я знаю немного больше программирования, я подумал, что стоит попытаться что-то сделать.

Итак, несколько часов спустя, я даю вам, RegSync v1 .

Просто возьмите копию полного пути к реестру (в вашем случае HKEY_CURRENT_USER\Software\SimonTatham\PuTTY) и вставьте его в коробку.

Нажмите «Пуск», и он автоматически проверит этот раздел реестра на наличие добавлений, удалений или изменений.

Если он обнаружит какие-либо изменения, он * экспортирует файл реестра с именем regsync.reg в ту же папку, где запущено приложение.

* В случае более чем одного изменения за раз, он будет ждать 5 секунд после первого изменения.

Когда / после нажатия кнопки запуска, он будет отслеживать папку, в которой он находится, на предмет любых изменений в файле regsync.reg , и если он обнаружит изменение, он удалит ВСЕ записи в выбранном вами разделе реестра и импортирует реестр. файл. (Пожалуйста, будьте осторожны, он не будет проверять .Reg файл совпадает с местоположением, которое он отслеживает, поэтому, если вы введете разные местоположения на каждом компьютере, он может испортиться).

Итак ... вы можете запустить это из общих папок Dropbox или Windows, или из любой другой службы общего доступа к папкам. Запустите его на обоих компьютерах и выберите раздел реестра для мониторинга.

Дополнительные заметки ...

  • Для этого требуется .NET Framework версии 4.

  • Он не контролирует подключи, вы можете запускать дополнительные копии инструмента, хотя и в разных папках (у меня уже есть идеи по улучшению этого, но только если люди нуждаются в инструменте).

  • Хотя это не требует повышения прав UAC, оно будет выдавать вам ошибки при каждом повышении уровня импорта или экспорта из реестра (в основном это вызывает regedit.exe/reg.exe), поэтому я рекомендую запустить программу с повышенными правами . , Он делает это несколько раз, и это станет очень раздражающим.

  • Никаких гарантий - он получает значок "Работает на моем ПК", и я протестировал его на нескольких машинах, но у него не было обзора кода и часов тестирования ... Начните заканчивать через несколько часов.

Даже если вы не используете его, я надеюсь, что это кому-то пригодится!

Ссылка для скачивания

5

может быть проще запустить 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .