Windows XPレジストリに、Dropboxスタイルの2台のコンピューター間で同期したい特定のフォルダーがあります。レジストリを変更するたびに、そのようにしたいのです。 1台のコンピューターでは、他のコンピューターに表示されます。
可能?どうやって?
(なぜ私がこれをしたいのか知りたい場合:すべてのコンピューターで同じPuTTYセッションを持ちたいです。)
時間がかかってすみません、これは私が答えを書くのにかかった最長だと思います!
何年も前、私は非常によく似た機能が欲しかったのですが、それを行う方法が見つかりませんでした...プログラミングがかなりわかったので、何かを作ってみる価値があると思いました。
それで、数時間後、私はあなたに_RegSync v1
_を与えます。
完全なレジストリパス(この場合は_HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
_)のコピーを取り、ボックスに貼り付けるだけです。
[開始]をクリックすると、そのレジストリキーが追加、削除、または変更されていないか自動的に監視されます。
変更を検出すると、_*
_は、アプリケーションが実行されているのと同じフォルダーに_regsync.reg
_というレジストリファイルをエクスポートします。
_*
_一度に複数の変更があった場合、最初の変更後5秒間待機します。
スタートボタンが押されたとき/後に、_regsync.reg
_ファイルへの変更がないかフォルダを監視し、変更を検出すると、ローカルで選択したレジストリキーのすべてのエントリを削除してインポートしますレジストリファイル。 (注意してください。_.Reg
_ファイルが監視している場所と一致するかどうかはチェックされないため、PCごとに異なる場所を入力すると、問題が発生する可能性があります)。
つまり...これは、DropboxやWindowsの共有、またはその他のフォルダー共有サービスから実行できます。両方のコンピューターで実行し、監視するレジストリキーを選択します。
追記...
これには、.NETFrameworkバージョン4が必要です。
サブキーは監視されません。別のフォルダーでツールの追加コピーを実行できます(これを改善するためのアイデアはすでにありますが、ツールが必要な場合に限ります)。
UACの昇格は必要ありませんが、レジストリからインポートまたはエクスポートしようとするたびに昇格のバグが発生します(基本的には_regedit.exe
_/_reg.exe
_を呼び出します)。したがって、実行することをお勧めします。プログラムが昇格しました...これを数回実行すると、非常に煩わしくなります。
保証はありません-「Worksonmy 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