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


30

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

有人能为我指出正确的方向,以解决为什么没有重新启动主机就无法完成主机名更改的技术挑战吗?


1
在已接受的答案中添加了注释,并提供了指向MSDN文章的链接,该文章介绍了为什么需要重新启动。
阿米尔·迪恩

我不会说链接的文章解释了为什么需要重新启动。毕竟,如果仅是将其复制到其他位置的问题,那么更改名称的命令可以继续进行并将其复制。接受的答案中的关键句子是“许多Windows服务和应用程序,无论是由Microsoft还是由第三方编写的,都使用系统的主机名,通常在启动时只读取一次,而从不读取。”
制造商史蒂夫(Steve)

Answers:


56

重命名计算机后,您不必立即重新启动...只是不要期望每个服务和功能都可以使用新名称。

在系统启动时,系统环境变量之类的内容只能读取一次。如果您更改了这些变量,则Windows的各个组件将在重新启动之前无法使用。这些组件中的某些组件与操作系统是如此紧密地集成在一起,您不妨重新启动整个操作系统。

许多Windows服务和应用程序,无论是由Microsoft还是由第三方编写的,都使用系统的主机名,通常在启动时只读取一次,而从不读取。

我知道如果我正在编写一个读取机器主机名的应用程序,以防万一它变了就定期轮询它对我来说是很愚蠢的。

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

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

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

不相同,这意味着系统具有待处理的重命名操作,该操作将在下次系统重新引导时完成。


10
感谢小费瑞安。我查找了System.Environment.MachineName的代码(使用dotnetpeek)。它使用Kernel32.dll中的GetComputerName函数:“检索本地计算机的NetBIOS名称。当系统从注册表中读取该名称时,将在系统启动时建立此名称。” (msdn.microsoft.com/en-us/library/windows/desktop/…)。换句话说,您正确地说,它只是在启动时缓存的。只是想要一些文档来备份它。谢谢。
Ameer Deen

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.