Frage Warum erfordert der Computername einen Neustart in Windows?


Ich verstehe, dass das Ändern des Hostnamens / Computernamens für einen Windows-basierten Computer (Client oder Server) einen Neustart erfordert. Ich merke, dass sobald ein Computername geändert wird, ein ausstehender Computername in der Systemregistrierung gespeichert und beim nächsten Start angewendet wird. Ich konnte nicht viel technische Dokumentation genau finden, WARUM dies erforderlich war.

Kann mir jemand bitte in die richtige Richtung auf die technischen Herausforderungen zeigen, warum eine Änderung des Hostnamens ohne einen Systemneustart nicht abgeschlossen ist?


30
2017-08-18 13:37


Ursprung


Der akzeptierten Antwort wurde ein Kommentar mit einem Link zu einem MSDN-Artikel hinzugefügt, in dem erläutert wird, warum ein Neustart erforderlich ist. - Ameer Deen
Ich würde nicht sagen, dass der verlinkte Artikel erklärt Warum Ein Neustart ist erforderlich. Wenn es nur darum ging, es an diesen anderen Ort zu kopieren, könnte der Befehl zum Ändern des Namens ausgeführt werden und es kopieren. Der Schlüsselsatz in der angenommenen Antwort ist "Viele Windows-Dienste und -Anwendungen, sowohl solche von Microsoft als auch von Drittanbietern, die den Hostnamen des Systems verwenden, lesen sie normalerweise nur einmal beim Start und lesen sie nie wieder." - ToolmakerSteve


Antworten:


Sie müssen nach dem Umbenennen des Rechners nicht sofort neu starten ... erwarten Sie nicht, dass jeder Dienst und jede Funktion den neuen Namen annimmt.

Dinge wie Systemumgebungsvariablen werden beim Systemstart einmal gelesen. Wenn Sie diese Variablen ändern, werden sie von den verschiedenen Komponenten von Windows erst nach ihrem Neustart erkannt. Einige dieser Komponenten sind so tief in das Betriebssystem integriert, dass Sie das gesamte Betriebssystem neu starten könnten.

Viele Windows-Dienste und -Anwendungen, sowohl solche von Microsoft als auch von Drittanbietern, die den Hostnamen des Systems verwenden, lesen sie normalerweise nur einmal beim Start und lesen sie nie wieder.

Ich weiß, wenn ich eine Anwendung schreibe, die den Hostnamen der Maschine liest, wäre es ziemlich albern von mir, regelmäßig danach zu fragen, falls es sich ändert.

In einem Betriebssystem wie Linux sehen Sie das Gleiche. Sie können den Hostnamen ohne Neustart ändern, aber Sie müssen einige sehr grundlegende Komponenten des Systems neu starten, damit sie den neuen Namen erkennen können. Linux ist modularer als Windows, obwohl Windows in Sachen Modularität weit fortgeschritten ist.

Eine Möglichkeit zum Erkennen, ob ein Windows-System eine Umbenennung des Computers aussteht, besteht darin, die Registrierung zu überprüfen. Wenn der Inhalt von

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName 

und

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

sind nicht identisch, dh das System hat einen ausstehenden Umbenennungsvorgang, der beim nächsten Systemneustart abgeschlossen wird.


56
2017-08-18 14:04



Danke für den Tipp Ryan. Ich habe den Code für System.Environment.MachineName (mit dotnetpeek) nachgeschlagen. Es verwendet die GetComputerName-Funktion in Kernel32.dll, die "den NetBIOS-Namen des lokalen Computers abruft. Dieser Name wird bei Systemstart festgelegt, wenn das System es aus der Registrierung liest". (msdn.microsoft.com/de-de/library/windows/desktop/...). Mit anderen Worten, Sie haben Recht, es ist beim Start einfach zwischengespeichert. Wollte nur ein paar Unterlagen, um es zu sichern. Vielen Dank. - Ameer Deen


Hier ist ein Skript zum Überspringen des Neustarts: https://gist.github.com/timnew/2373475


0
2017-10-26 22:35