我了解更改基于 Windows 的机器(客户端或服务器)的主机名/计算机名需要重新启动。我意识到一旦更改了计算机名称,系统注册表中就会存储一个挂起的计算机名称,并在下次启动时应用。我找不到太多关于为什么需要这样做的技术文档。
有人可以为我指出正确的方向吗?为什么不重新启动系统就无法完成主机名更改背后的技术挑战?
我了解更改基于 Windows 的机器(客户端或服务器)的主机名/计算机名需要重新启动。我意识到一旦更改了计算机名称,系统注册表中就会存储一个挂起的计算机名称,并在下次启动时应用。我找不到太多关于为什么需要这样做的技术文档。
有人可以为我指出正确的方向吗?为什么不重新启动系统就无法完成主机名更改背后的技术挑战?
您不必在重命名机器后立即重新启动......只是不要期望每个服务和功能都能使用新名称。
系统环境变量等内容在系统启动时读取一次。如果您更改这些变量,Windows 的各个组件将在它们重新启动之前不会使用它们。其中一些组件与操作系统的集成如此之深,您不妨重新启动整个操作系统。
许多使用系统主机名的 Windows 服务和应用程序,包括由 Microsoft 编写的以及第 3 方编写的,通常只在启动时读取一次,并且不再读取它。
我知道如果我正在编写一个读取机器主机名的应用程序,那么定期轮询它以防万一它发生变化,这对我来说是很愚蠢的。
在 Linux 等操作系统中,您会看到同样的情况。您可以在不重新启动的情况下更改主机名,但您必须重新启动系统的一些非常基本的组件才能让它们使用新名称。Linux 比 Windows 更模块化,尽管 Windows 在模块化方面已经走了很长一段路。
检测 Windows 系统是否正在等待计算机重命名操作的一种方法是检查注册表。如果内容
HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName
和
HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName
不一样,这意味着系统有一个挂起的重命名操作,它将在下次系统重新启动时完成。
这是跳过重启的脚本:https ://gist.github.com/timnew/2373475