Windowsベースのマシン(クライアントまたはサーバー)のホスト名/コンピューター名を変更するには再起動が必要であることを理解しています。コンピュータ名が変更されると、保留中のマシン名がシステムレジストリに保存され、次回の起動時に適用されることに気付きました。なぜこれが必要だったのかについての技術文書を見つけることができませんでした。
ホスト名の変更がシステムの再起動なしでは完了しない理由の背後にある技術的な課題について、誰かが正しい方向を教えてくれますか?
Windowsベースのマシン(クライアントまたはサーバー)のホスト名/コンピューター名を変更するには再起動が必要であることを理解しています。コンピュータ名が変更されると、保留中のマシン名がシステムレジストリに保存され、次回の起動時に適用されることに気付きました。なぜこれが必要だったのかについての技術文書を見つけることができませんでした。
ホスト名の変更がシステムの再起動なしでは完了しない理由の背後にある技術的な課題について、誰かが正しい方向を教えてくれますか?
回答:
マシンの名前を変更した直後に再起動する必要はありません...すべてのサービスと機能が新しい名前を取得することを期待しないでください。
システム環境変数などは、システムの起動時に一度読み取られます。これらの変数を変更すると、Windowsのさまざまなコンポーネントは、再起動されるまでそれらを取得しません。これらのコンポーネントの一部はOSと非常に深く統合されているため、OS全体を再起動することもできます。
システムのホスト名を使用する多くのWindowsサービスとアプリケーション(Microsoftとサードパーティの両方が作成したもの)は、通常、起動時に一度だけ読み取り、それを再度読み取りません。
マシンのホスト名を読み取るアプリケーションを作成している場合、それが変更された場合に備えて定期的にポーリングするのはかなり愚かなことです。
Linuxなどのオペレーティングシステムでも同じことがわかります。再起動せずにホスト名を変更できますが、システムの非常に基本的なコンポーネントを再起動して新しい名前を取得する必要があります。LinuxはWindowsよりもモジュール化されていますが、Windowsはモジュール性の点で長い道のりを歩んできました。
Windowsシステムがコンピューターの名前変更操作を保留しているかどうかを検出する1つの方法は、レジストリを確認することです。の内容が
HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName
そして
HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName
同じではありません。つまり、システムの保留中の名前変更操作は、システムの次回の再起動時に完了します。
再起動をスキップするためのスクリプトを次に示します。https://gist.github.com/timnew/2373475