Windows XPレジストリに、2台のコンピューター間で同期したい特定のフォルダーがあります。Dropboxスタイルです。私が望む方法は、1台のコンピューターでレジストリを変更するたびに、他のコンピューターに表示されることです。
可能?どうやって?
(なぜ私がこれをしたいのかについて興味があるなら、私はすべてのコンピューターで同じPuTTYセッションを持ちたいと思っています。)
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
です。
Windows XPレジストリに、2台のコンピューター間で同期したい特定のフォルダーがあります。Dropboxスタイルです。私が望む方法は、1台のコンピューターでレジストリを変更するたびに、他のコンピューターに表示されることです。
可能?どうやって?
(なぜ私がこれをしたいのかについて興味があるなら、私はすべてのコンピューターで同じPuTTYセッションを持ちたいと思っています。)
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
です。
回答:
時間がかかってすみません、これは私が答えを書くのにかかった中で最も長いと思います!
昔、私は非常に類似した機能が欲しかったのですが、それを行う方法が見つかりませんでした...プログラミングについてはかなり知っているので、何かを試してみる価値があると思いました。
それで、数時間後、私はあなたに与えますRegSync v1
。
(あなたの場合HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
)完全なレジストリパスのコピーを取り、ボックスに貼り付けます。
[スタート]をクリックすると、追加、削除、変更がないか、レジストリキーが自動的に監視されます。
変更を検出すると、アプリケーションが実行されているのと同じフォルダに*
あるレジストリファイルをエクスポートしますregsync.reg
。
*
一度に複数の変更がある場合、最初の変更後5秒間待機します。
開始ボタンが押された後、regsync.reg
ファイルが変更されていないかフォルダーを監視し、変更を検出すると、ローカルで選択したレジストリキーのすべてのエントリを削除して、レジストリファイルをインポートします。(注意してください、それは.Reg
ファイルがそれが監視している場所と一致することをチェックしないので、各PCで異なる場所を入力すると、それはうまくいかないかもしれません)。
だから...あなたはこれをDropboxやWindows共有、または他のフォルダ共有サービスから実行できます。両方のコンピューターで実行し、監視するレジストリキーを選択します。
追記...
これには、.NET Frameworkバージョン4が必要です。
サブキーは監視されません。別のフォルダーでツールの追加コピーを実行できます(私はすでにこれを改善するためのアイデアを持っていますが、ツールが必要な場合のみ)。
UAC昇格は必要ありませんが、レジストリからインポートまたはエクスポートしようとするたびに昇格のバグが発生します(基本的にregedit.exe
/を呼び出しますreg.exe
)。そのため、プログラムを昇格して実行することをお勧めします...これは数回実行されますそしてそれは非常に迷惑になります。
保証なし-「私のPCで動作する」というバッジが表示され、数台のマシンでテストしましたが、これにはコードレビューと数時間のテストがありません...数時間で終了します。
使っていなくても、誰かに役立つといいですね!
regedit.exeをサイレントモードで実行し、必要な正確なエントリを含むレジストリファイルを実行する方が簡単な場合があります。共有場所から実行するように各コンピューターを設定できるので、ファイルを更新するだけで、次にスケジュールされているregedit.exeの実行が各コンピューターで実行されると、新しいエントリが取得されます。
何かのようなもの:
regedit.exe /S puttyentries.reg
1台のコンピューターからレジストリキーを取得するには、次を使用します。
regedit.exe /E puttyentries.reg "registry_key"
レジストリのリモート読み取り/書き込み機能を備えたvbscriptまたはautoitを使用してプロセス全体を自動化するより洗練された方法がおそらくあるでしょう。
30分ごとにリモートコンピューターと同期するAutoItの例を次に示します(注意、私は実際にこれをテストしていません)。
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
regedit
サイレントモードでレジストリから抽出することもできますか?