为什么计算机名称更改需要在 Windows 中重新启动?

Ame*_*een 34 windows

我了解更改基于 Windows 的机器(客户端或服务器)的主机名/计算机名需要重新启动。我意识到一旦更改了计算机名称,系统注册表中就会存储一个挂起的机器名称,并在下次启动时应用。我找不到很多关于为什么需要这样做的技术文档。

有人可以就为什么没有系统重新启动主机名更改不完整背后的技术挑战向我指出正确的方向吗?

Rya*_*ies 58

您不必在重命名机器后立即重新启动……只是不要期望每个服务和功能都采用新名称。

在系统启动时,诸如系统环境变量之类的内容会被读取一次。如果您更改这些变量,则 Windows 的各个组件在重新启动之前不会使用它们。其中一些组件与操作系统深度集成,您不妨重新启动整个操作系统。

许多使用系统主机名的 Windows 服务和应用程序(包括 Microsoft 和 3rd 方编写的服务和应用程序)通常只在启动时读取一次,再也不会读取。

我知道如果我正在编写一个读取机器主机名的应用程序,那么定期轮询它以防万一它发生变化是非常愚蠢的。

在诸如 Linux 之类的操作系统中,您会看到同样的事情。您可以在不重新启动的情况下更改主机名,但您必须重新启动系统的一些非常基本的组件,以便让它们使用新名称。Linux 比 Windows 更模块化,尽管 Windows 在模块化方面已经走了很长一段路。

检测 Windows 系统是否正在等待计算机重命名操作的一种方法是检查注册表。如果内容

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

不一样,这意味着系统有一个挂起的重命名操作,该操作将在下次系统重新启动时完成。

  • 感谢瑞恩的提示。我查找了 System.Environment.MachineName 的代码(使用 dotnetpeek)。它使用 Kernel32.dll 中的 GetComputerName 函数:“检索本地计算机的 NetBIOS 名称。该名称是在系统启动时建立的,当系统从注册表中读取它时。” (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724295\(v=vs.85\).aspx)。换句话说,你是对的,它只是在启动时缓存。只是想要一些文档来支持它。谢谢。 (11认同)