Dlaczego zmiana nazwy komputera wymaga ponownego uruchomienia w systemie Windows?

30

Rozumiem, że zmiana nazwy hosta / nazwy komputera dla komputera z systemem Windows (klienta lub serwera) wymaga ponownego uruchomienia. Zdaję sobie sprawę, że po zmianie nazwy komputera oczekująca nazwa komputera jest zapisywana w rejestrze systemu i stosowana przy następnym uruchomieniu. Nie byłem w stanie znaleźć dużej dokumentacji technicznej na temat tego, DLACZEGO było to wymagane.

Czy ktoś może skierować mnie w dobrym kierunku na wyzwania techniczne stojące za przyczyną, dla której zmiana nazwy hosta nie jest kompletna bez ponownego uruchomienia systemu?

Ameer Deen
źródło
1
Dodano komentarz do zaakceptowanej odpowiedzi wraz z linkiem do artykułu MSDN, dlaczego wymagane jest ponowne uruchomienie komputera.
Ameer Deen,
Nie powiedziałbym, że powiązany artykuł wyjaśnia, dlaczego wymagane jest ponowne uruchomienie. W końcu, jeśli chodziło tylko o skopiowanie go do tej innej lokalizacji, wówczas polecenie zmiany nazwy można było skopiować i skopiować. Kluczowe zdanie w zaakceptowanej odpowiedzi brzmi: „Wiele usług i aplikacji systemu Windows, zarówno napisanych przez Microsoft, jak i inne firmy, które używają nazwy hosta systemu, zwykle odczytują ją tylko raz podczas uruchamiania i nigdy więcej”.
ToolmakerSteve

Odpowiedzi:

56

Nie musisz restartować natychmiast po zmianie nazwy komputera ... po prostu nie oczekuj, że każda usługa i funkcja odbierze nową nazwę.

Rzeczy, takie jak systemowe zmienne środowiskowe, są odczytywane raz, podczas uruchamiania systemu. Jeśli zmienisz te zmienne, różne składniki systemu Windows nie wykryją ich, dopóki nie zostaną ponownie uruchomione. Niektóre z tych komponentów są tak głęboko zintegrowane z systemem operacyjnym, że równie dobrze możesz zrestartować cały system operacyjny.

Wiele usług i aplikacji Windows, zarówno tych napisanych przez Microsoft, jak i innych firm, korzystających z nazwy hosta systemu, zwykle odczytuje ją tylko raz przy uruchamianiu i nigdy więcej nie czyta.

Wiem, że gdybym pisał aplikację, która odczytuje nazwę hosta komputera, głupio byłoby z mojej strony okresowo sprawdzać, czy to się nie zmieniło.

W systemie operacyjnym, takim jak Linux, widzisz to samo. Możesz zmienić nazwę hosta bez ponownego uruchamiania, ale musisz zrestartować niektóre bardzo podstawowe elementy systemu, aby mogły one odebrać nową nazwę. Linux jest bardziej modułowy niż Windows, chociaż Windows przeszedł długą drogę pod względem modułowości.

Jednym ze sposobów wykrycia, czy system Windows oczekuje na operację zmiany nazwy komputera, jest sprawdzenie rejestru. Jeśli zawartość

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

i

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

nie są takie same, co oznacza, że ​​system ma oczekującą operację zmiany nazwy, która zakończy się przy następnym uruchomieniu systemu.

Ryan Ries
źródło
10
Dzięki za wskazówkę Ryan. Poszukałem kodu System.Environment.MachineName (używając dotnetpeek). Używa funkcji GetComputerName w Kernel32.dll, która: „Pobiera nazwę NetBIOS komputera lokalnego. Ta nazwa jest ustalana podczas uruchamiania systemu, gdy system odczytuje ją z rejestru.” ( msdn.microsoft.com/en-us/library/windows/desktop/… ). Innymi słowy, masz rację, to po prostu buforowane podczas uruchamiania. Chciałem tylko trochę dokumentacji, aby to zrobić. Dzięki.
Ameer Deen,