Pourquoi le changement de nom d'ordinateur nécessite-il un redémarrage sous Windows?

30

Je comprends que la modification du nom d'hôte / nom de l'ordinateur pour une machine Windows (client ou serveur) nécessite un redémarrage. Je me rends compte qu'une fois le nom d'un ordinateur modifié, un nom d'ordinateur en attente est stocké dans le registre système et appliqué au prochain démarrage. Je n'ai pas pu trouver beaucoup de documentation technique sur exactement POURQUOI cela était nécessaire.

Quelqu'un peut-il, s'il vous plaît, m'indiquer dans la bonne direction sur les défis techniques derrière pourquoi un changement de nom d'hôte n'est pas complet sans redémarrage du système?

Ameer Deen
la source
1
Ajout d'un commentaire à la réponse acceptée avec un lien vers un article MSDN expliquant pourquoi un redémarrage est nécessaire.
Ameer Deen
Je ne dirais pas que l'article lié explique pourquoi un redémarrage est nécessaire. Après tout, s'il s'agissait simplement de le copier vers cet autre emplacement, alors la commande pour changer le nom pourrait aller de l'avant et le copier. La phrase clé dans la réponse acceptée est "De nombreux services et applications Windows, écrits par Microsoft ainsi que des tiers, qui utilisent le nom d'hôte du système, ne le lisent généralement qu'une seule fois au démarrage et ne le lisent plus jamais."
ToolmakerSteve

Réponses:

56

Vous n'avez pas besoin de redémarrer immédiatement après avoir renommé la machine ... mais ne vous attendez pas à ce que chaque service et fonction reprenne le nouveau nom.

Des éléments tels que les variables d'environnement système sont lus une fois, au démarrage du système. Si vous modifiez ces variables, les divers composants de Windows ne les reprendront pas avant d'être redémarrés. Certains de ces composants sont si profondément intégrés au système d'exploitation que vous pourriez aussi bien redémarrer l'ensemble du système d'exploitation.

De nombreux services et applications Windows, qu'ils soient écrits par Microsoft ou par des tiers, qui utilisent le nom d'hôte du système, ne le lisent généralement qu'une seule fois au démarrage et ne le lisent plus jamais.

Je sais que si j'écrivais une application qui lisait le nom d'hôte de la machine, il serait assez idiot de ma part de l'interroger périodiquement juste au cas où cela changerait.

Dans un système d'exploitation tel que Linux, vous voyez la même chose. Vous pouvez changer le nom d'hôte sans redémarrer, mais vous devez redémarrer certains composants très basiques du système afin de les faire reprendre le nouveau nom. Linux est plus modulaire que Windows, bien que Windows ait parcouru un long chemin en termes de modularité.

Une façon de détecter si un système Windows est en attente d'une opération de changement de nom d'ordinateur est de vérifier le registre. Si le contenu de

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

et

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

ne sont pas identiques, cela signifie que le système a une opération de changement de nom en attente qui se terminera au prochain redémarrage du système.

Ryan Ries
la source
10
Merci pour le conseil Ryan. J'ai recherché le code de System.Environment.MachineName (en utilisant dotnetpeek). Il utilise la fonction GetComputerName dans Kernel32.dll qui: "Récupère le nom NetBIOS de l'ordinateur local. Ce nom est établi au démarrage du système, lorsque le système le lit à partir du Registre." ( msdn.microsoft.com/en-us/library/windows/desktop/… ). En d'autres termes, vous avez raison, c'est simplement mis en cache au démarrage. Je voulais juste de la documentation pour la sauvegarder. Merci.
Ameer Deen