Чому для зміни імені комп'ютера потрібна перезавантаження в Windows?


30

Я розумію, що для зміни імені хоста / комп’ютера для машини на базі Windows (клієнта чи сервера) потрібна перезавантаження. Я усвідомлюю, що після зміни імені комп'ютера назву машини, що очікує на зберігання, зберігається в системному реєстрі і застосовується при наступному завантаженні. Мені не вдалося знайти багато технічної документації, наскільки саме це потрібно.

Чи може хтось, будь ласка, вказати мене в правильному напрямку на технічні проблеми, які стоять перед тим, чому зміна імені хоста не є завершеною без перезавантаження системи?


1
До коментаря до прийнятої відповіді додано коментар із посиланням на статтю MSDN про те, чому потрібно перезавантажити.
Амер Дін

Я б не сказав, що пов'язана стаття пояснює, чому потрібна перезавантаження. Зрештою, якби справа була лише в тому, щоб скопіювати його в інше місце, тоді команда змінити ім'я могла б перейти і скопіювати його. Ключовим реченням у прийнятій відповіді є "Багато служб і програм Windows, як написаних Microsoft, так і сторонніх, які використовують ім'я хоста системи, як правило, читають його лише один раз при запуску і ніколи не читають його знову".
ToolmakerSteve

Відповіді:


56

Вам не доведеться перезавантажувати відразу після перейменування машини ... просто не сподівайтеся, що кожна послуга та функція перейдуть на нову назву.

Такі речі, як змінні системного середовища, читаються один раз при запуску системи. Якщо ви зміните ці змінні, різні компоненти Windows не будуть перебирати їх доти, доки вони не перезапустяться. Деякі з цих компонентів так глибоко інтегровані в ОС, можливо, ви також можете перезапустити всю ОС.

Багато служб і програм Windows, як написаних Microsoft, так і сторонніх, які використовують ім'я хоста системи, як правило, читають його лише один раз при запуску і ніколи не читають його знову.

Я знаю, що якби я писав заявку, яка читала ім'я хоста машини, мені було б досить нерозумно періодично опитуватись на нього на випадок, якщо воно змінилося.

В операційній системі, такі як Linux, ви бачите те саме. Ви можете змінити ім'я хоста без перезавантаження, але вам доведеться перезапустити деякі дуже основні компоненти системи, щоб змусити їх отримати нове ім'я. Linux є більш модульним, ніж Windows, хоча Windows пройшла довгий шлях з точки зору модульності.

Один із способів виявити, чи очікує система Windows перед операцією перейменування комп'ютера - перевірити реєстр. Якщо вміст

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

і

HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName

не однакові, це означає, що система має відкладену операцію перейменування, яка завершиться наступного разу, коли система перезавантажиться.


10
Дякую за пораду Раян. Я шукав код для System.Environment.MachineName (використовуючи dotnetpeek). Він використовує функцію GetComputerName в Kernel32.dll, яка: "Отримує ім'я NetBIOS на локальному комп'ютері. Це ім'я встановлюється при запуску системи, коли система зчитує його з реєстру." ( msdn.microsoft.com/en-us/library/windows/desktop/… ). Іншими словами, ви праві, що його просто кешується при запуску. Просто хотів трохи документації, щоб її створити. Спасибі.
Амер Дін

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.