2009-08-05 2 views
43

MSDN 설명서 및 여기에있는 다른 질문에서 로컬 컴퓨터 이름을 가져 오는 네 가지 방법이 있습니다.SystemInformation.ComputerName, Environment.MachineName 및 Net.Dns.GetHostName의 차이점

Environment.MachineName; 
System.Net.Dns.GetHostName(); 
System.Windows.Forms.SystemInformation.ComputerName; 
System.Environment.GetEnvironmentVariable("COMPUTERNAME"); 

differnece는 방법이 반환됩니다 무엇에 있는가 또는 그들 모두는 모든 시간을 정확히 똑같은 일을 반환합니다?

참고 : How do I get the local machine Name?

답변

39

Environment.MachineNameSystem.Windows.Forms.SystemInformation.ComputerName가 동일한 컴퓨터의 NetBIOS 이름을 반환

Environment.GetEnvironmentVariable 방법은 현재 process.For 자세한 내용에서 환경 변수를 검색하는 데 사용됩니다, 당신은 볼 수 있습니다. 이 이름은 15 자로 제한되며 LAN에서만 볼 수 있습니다.

System.Net.Dns.GetHostName()은 컴퓨터의 TCP/IP 기반 호스트 이름을 반환합니다. 호스트 이름에 도메인 접미사를 추가하면 LAN/인터넷을 통해 컴퓨터의 IP 주소를 확인할 수 있습니다.

System.Environment.GetEnvironmentVariable("COMPUTERNAME")은 설치 중에 설정된 컴퓨터 이름을 반환합니다. NetBIOS와 호스트 이름은 초기에 같은 이름으로 설정됩니다.

+2

는'System.Environment.GetEnvironmentVariable ("컴퓨터 이름")는 '환경 변수 컴퓨터 이름은 NetBIOS를 사용으로 설정되지 않고 무엇을 반환하지 않습니다? 환경 변수는 코드에서 아주 쉽게 조작 할 수 있으므로 NetBIOS에서보고 된 것과 다른 값으로 설정할 수 있습니다. – StarPilot

13

Environment.MachineName : 로컬 컴퓨터의 NetBIOS 이름이 레지스트리

Dns.GetHostName 읽기 : 컴퓨터의 취득 호스트 이름을 참조 는 내가 처음이 게시물의 목록을 보았다 하나 이상의 연관된 IP 주소가있는 도메인 이름.

System.Windows.Forms.SystemInformation.ComputerName : Environment.MachineName과 동일합니다. 차이점은 웹 페이지와 Windows 응용 프로그램에서 모두 호출 할 수 있다는 것입니다. 환경은 Windows 응용 프로그램에서만 사용됩니다.
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx

3

이러한 방법에는 몇 가지 중요한 차이점이 있습니다. 컴퓨터의 이름을 "GöransLilla 人物 987654321"이라고 말하십시오.
Environment.MachineNameGÖRANSLILLA 인물 98을 반환합니다. 그것은 잘린 모든 대문자입니다.
Dns.GetHostNameGöransLilla ?? 987654321을 반환합니다. 전체 길이와 정확한 대소 문자가 있지만 중국어 멀티 바이트 문자가 '?'로 바뀌 었습니다. 스웨덴어 'ö'는 유지됩니다.

Windows에서 지정된대로 실제 이름을 얻는 방법을 알고있는 유일한 방법은 pinvoke입니다.

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
    static extern bool GetComputerNameEx(COMPUTER_NAME_FORMAT NameType, System.Text.StringBuilder lpBuffer, ref uint lpnSize); 

    System.Text.StringBuilder nameBuilder = new System.Text.StringBuilder(260); 
    uint size = 260; 
    bool success = GetComputerNameEx(COMPUTER_NAME_FORMAT.ComputerNameDnsHostname, nameBuilder, ref size); 
    Console.WriteLine(nameBuilder.ToString()); 
+1

OK, 첫 번째 게시물의 링크를 따라 가면서 System.Net.Dns.GetHostEntry ("localhost")를 발견했습니다. HostName은 또한 실제로 한자를 올바르게 반환합니다.그래서 그 의미에서 GetHostName과 다르며 pinvoke에 대한 좋은 대안입니다. –