เหตุใดการเปลี่ยนชื่อคอมพิวเตอร์จึงต้องมีการรีบูตใน Windows


30

ฉันเข้าใจว่าการเปลี่ยนชื่อโฮสต์ / ชื่อคอมพิวเตอร์สำหรับเครื่องที่ใช้ Windows (ไคลเอนต์หรือเซิร์ฟเวอร์) จำเป็นต้องรีบูต ฉันรู้ว่าเมื่อมีการเปลี่ยนชื่อคอมพิวเตอร์ชื่อเครื่องที่ค้างอยู่จะถูกเก็บไว้ในรีจิสตรีระบบและนำไปใช้ในการบูตครั้งถัดไป ฉันไม่สามารถหาเอกสารทางเทคนิคได้มากนักว่าทำไมต้องมีสิ่งนี้

ใครช่วยชี้แนะทางให้ฉันในทิศทางที่ถูกต้องเกี่ยวกับความท้าทายทางเทคนิคที่อยู่เบื้องหลังว่าทำไมการเปลี่ยนชื่อโฮสต์ไม่เสร็จสมบูรณ์หากไม่มีการรีบูทระบบ?


1
เพิ่มความคิดเห็นไปยังคำตอบที่ยอมรับพร้อมลิงก์ไปยังบทความ MSDN ว่าทำไมต้องมีการรีบูต
Ameer Deen

ฉันจะไม่บอกว่าบทความที่เชื่อมโยงอธิบายว่าทำไมต้องมีการรีบูต ท้ายที่สุดถ้ามันเป็นเพียงเรื่องของการคัดลอกไปยังตำแหน่งอื่นแล้วคำสั่งในการเปลี่ยนชื่อสามารถไปข้างหน้าและคัดลอก ประโยคสำคัญในคำตอบที่ได้รับการยอมรับคือ"บริการและแอพพลิเคชั่นของ Windows จำนวนมากทั้งที่เขียนโดย Microsoft รวมถึงบุคคลที่สามที่ใช้ชื่อโฮสต์ของระบบโดยทั่วไปแล้วจะอ่านเพียงครั้งเดียวเมื่อเริ่มต้น
ToolmakerSteve

คำตอบ:


56

คุณไม่ต้องรีสตาร์ททันทีหลังจากเปลี่ยนชื่อเครื่อง ... เพียงแค่ไม่ต้องรอทุกบริการและฟังก์ชั่นในการรับชื่อใหม่

สิ่งต่าง ๆ เช่นตัวแปรสภาพแวดล้อมของระบบจะถูกอ่านหนึ่งครั้งเมื่อเริ่มต้นระบบ หากคุณเปลี่ยนตัวแปรเหล่านั้นส่วนประกอบต่าง ๆ ของ Windows จะไม่สามารถรับได้จนกว่าจะมีการรีสตาร์ท ส่วนประกอบเหล่านี้บางส่วนมีการผสานรวมกับระบบปฏิบัติการอย่างล้ำลึกคุณอาจต้องรีสตาร์ททั้งระบบปฏิบัติการ

บริการและแอพพลิเคชั่นของ Windows จำนวนมากทั้งที่เขียนโดย Microsoft รวมถึงบุคคลที่สามที่ใช้ชื่อโฮสต์ของระบบโดยทั่วไปจะอ่านเพียงครั้งเดียวเมื่อเริ่มต้นและไม่เคยอ่านอีกครั้ง

ฉันรู้ว่าถ้าฉันกำลังเขียนแอปพลิเคชันที่อ่านชื่อโฮสต์ของเครื่องมันจะค่อนข้างโง่ของฉันที่จะสำรวจความคิดเห็นเป็นระยะ ๆ ในกรณีที่มันเปลี่ยนไป

ในระบบปฏิบัติการเช่น 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/… ) พูดอีกอย่างก็คือคุณถูกแคชไว้เมื่อเริ่มต้น เพิ่งต้องการเอกสารบางอย่างเพื่อสำรอง ขอบคุณ
Ameer Deen

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.