Sincronizando o registro do Windows entre vários computadores

9

Existe uma certa pasta no meu registro do Windows XP que gostaria de sincronizar entre meus dois computadores, no estilo Dropbox. O jeito que eu quero é que toda vez que faço uma alteração no registro em um computador, ele aparece no outro (s) computador (es).

Possível? Como?

(Se você está curioso sobre porque eu quero fazer isso: Eu quero ter as mesmas sessões PuTTY em todos os computadores.)

    
por Ram Rachum 25.08.2011 / 19:43

2 respostas

6

Desculpe por levar tanto tempo, acho que este é o mais longo que tomei para escrever uma resposta!

Há séculos atrás, eu queria funcionalidades muito semelhantes, mas não consegui encontrar uma maneira de fazê-lo ... agora que sei um pouco mais de programação, achei que valeria a pena tentar fazer alguma coisa.

Então, algumas horas depois, eu dou a você, RegSync v1 .

Bastacopiarocaminhocompletodoregistro(noseucasoHKEY_CURRENT_USER\Software\SimonTatham\PuTTY)ecolá-lonacaixa.

CliqueemIniciareelemonitoraráautomaticamenteessachavedoregistroparaquaisqueradições,exclusõesoualterações.

Sedetectarquaisqueralterações,*exportaráumarquivoderegistrochamadoregsync.regnamesmapastaemqueoaplicativoestásendoexecutado.

*Nocasodemaisdeumaalteraçãoporvez,elaaguardará5segundosapósaprimeiraalteração.

Quando/apósobotãoIniciarserpressionado,elemonitoraráapastaemqueestáinserindoalteraçõesnoarquivoregsync.rege,sedetectarumaalteração,excluiráTODASasentradasnachavedoregistroselecionadalocalmenteeimporteoarquivoderegistro.(Porfavor,tenhacuidado,elenãoiráverificarseoarquivo.Regcorrespondeaolocalqueestámonitorando,então,sevocêdigitarlocaisdiferentesemcadacomputador,elepodeficarruim).

Então...vocêpodeexecutá-loapartirdoscompartilhamentosdacaixadedepósitooudoWindowsoudequalqueroutroserviçodecompartilhamentodepastas.Execute-oemambososcomputadoreseselecioneachavederegistroparamonitorar.

Notasextras...

  • Issorequero.NETFrameworkversão4.

  • Nãomonitorasubchaves,vocêpodeexecutarcópiasadicionaisdaferramentaempastasdiferentes(játenhoideiasparamelhorarisso,massomenteseaspessoasprecisaremdaferramenta).

  • EmboraelenãoexijaelevaçãodoUAC,eleiráincomodaraelevaçãotodavezqueeletentarimportarouexportardoregistro(basicamentechamaregedit.exe/reg.exe),então,eurecomendoquevocêexecutaroprogramaelevado...Elefazissováriasvezesevaisetornarmuitochato.

  • Semgarantias-Elerecebeoselo"Funciona no meu PC" e testei em algumas máquinas, mas isso não teve revisão de código e horas de teste ... Comece a terminar em um poucas horas.

Mesmo que você não acabe usando, espero que seja útil para alguém de fora!

Link para download

    
por 26.08.2011 / 02:51
5

pode ser mais fácil executar o regedit.exe no modo silencioso com um arquivo de registro que contém as entradas exatas que você deseja. Você pode configurar cada computador para executá-lo a partir de um local compartilhado, então tudo que você precisa fazer é atualizar o arquivo e quando a próxima execução agendada do regedit.exe for executada em cada computador, eles obterão as novas entradas.

algo como:

regedit.exe /S puttyentries.reg

Para extrair uma chave de registro de um computador, você usaria:

regedit.exe /E puttyentries.reg "registry_key"

Provavelmente haveria maneiras mais elegantes de automatizar todo o processo usando vbscript ou autoit com funções remotas de leitura / gravação para o registro.

Aqui está um exemplo com o AutoIt que será sincronizado a cada 30 minutos com um computador remoto (advertência, eu realmente não testei isso):

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
    
por 25.08.2011 / 19:51