Por que a alteração do nome do computador requer uma reinicialização no Windows?

30

Entendo que alterar o nome do host / nome do computador para uma máquina com Windows (cliente ou servidor) requer uma reinicialização. Sei que, uma vez que o nome de um computador é alterado, um nome de máquina pendente é armazenado no registro do sistema e aplicado na próxima inicialização. Não consegui encontrar muita documentação técnica sobre exatamente por que isso era necessário.

Alguém pode me indicar a direção certa sobre os desafios técnicos por trás de por que uma alteração no nome do host não é concluída sem a reinicialização do sistema?

Ameer Deen
fonte
11
Foi adicionado um comentário à resposta aceita com um link para um artigo do MSDN sobre o motivo de uma reinicialização ser necessária.
Ameer Deen
Eu não diria que o artigo vinculado explica por que uma reinicialização é necessária. Afinal, se fosse apenas uma questão de copiá-lo para outro local, o comando para alterar o nome poderia prosseguir e copiá-lo. A frase-chave na resposta aceita é "Muitos serviços e aplicativos do Windows, tanto os escritos pela Microsoft quanto os de terceiros, que usam o nome do host do sistema, normalmente o lê apenas uma vez na inicialização e nunca mais o lê".
Página

Respostas:

56

Você não precisa reiniciar imediatamente após renomear a máquina ... apenas não espere que todos os serviços e funções apareçam no novo nome.

Coisas como variáveis ​​de ambiente do sistema são lidas uma vez, na inicialização do sistema. Se você alterar essas variáveis, os vários componentes do Windows não serão detectados até que sejam reiniciados. Alguns desses componentes estão tão profundamente integrados ao sistema operacional que é possível reiniciar todo o sistema operacional.

Muitos serviços e aplicativos do Windows, tanto os criados pela Microsoft quanto os de terceiros, que usam o nome do host do sistema, normalmente o leem apenas uma vez na inicialização e nunca mais o leem.

Sei que estava escrevendo um aplicativo que lia o nome do host da máquina, seria uma tolice da minha parte fazer pesquisas periodicamente para o caso de mudar.

Em um sistema operacional como o Linux, você vê a mesma coisa. Você pode alterar o nome do host sem reiniciar, mas é necessário reiniciar alguns componentes muito básicos do sistema para que eles sigam o novo nome. O Linux é mais modular que o Windows, embora o Windows tenha percorreu um longo caminho em termos de modularidade.

Uma maneira de detectar se um sistema Windows está pendente de uma operação de renomeação de computador é verificar o registro. Se o conteúdo de

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

e

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

não são os mesmos, isso significa que o sistema possui uma operação de renomeação pendente que será concluída na próxima vez em que o sistema for reiniciado.

Ryan Ries
fonte
10
Obrigado pela dica Ryan. Eu procurei o código para System.Environment.MachineName (usando dotnetpeek). Ele usa a função GetComputerName no Kernel32.dll que: "Recupera o nome NetBIOS do computador local. Esse nome é estabelecido na inicialização do sistema, quando o sistema o lê no registro". ( msdn.microsoft.com/en-us/library/windows/desktop/… ). Em outras palavras, você está certo: é simplesmente armazenado em cache na inicialização. Só queria alguma documentação para fazer backup. Obrigado.
Ameer Deen