SystemInformation.ComputerName,Environment.MachineName和Net.Dns.GetHostName之间的区别

从我所看到的,在MSDN文档和其他问题这里有所以,有四种方法来获取本地计算机名称。

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

他们的方法会有什么不同,或者他们会一直返回完全相同的东西吗?

注意:我第一次看到这个post中的列表:我如何获得本地机器名称?

Environment.MachineNameSystem.Windows.Forms.SystemInformation.ComputerName是相同的,并返回计算机的NetBIOS名称。 该名称限制为15个字符,并且只能在LAN上显示。

System.Net.Dns.GetHostName()返回计算机的基于TCP / IP的主机名。 通过在主机名上添加域名后缀,您可以通过互联网上的局域网/互联网parsing计算机的IP地址。

System.Environment.GetEnvironmentVariable("COMPUTERNAME")返回安装期间设置的计算机名称。 NetBIOS和主机名最初设置为相同的名称。

Environment.MachineName :从registry中读取的本地计算机的NetBIOS名称

Dns.GetHostName :获取引用具有一个或多个关联的IP地址的域名的计算机的主机名。

System.Windows.Forms.SystemInformation.ComputerName :与Environment.MachineName相同,区别在于您可以从网页和Windows应用程序中调用此环境。环境仅用于Windows应用程序。

Environment.GetEnvironmentVariable方法用于从当前进程中检索环境variables。有关更多信息,请参阅:
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx

这些方法之间有一些重要的区别。 假设您将您的计算机命名为“ GöransLilla人物987654321 ”。
Environment.MachineName将返回GÖRANSLILLA人物98 。 这是截断,全部大写。
Dns.GetHostName将返回GöransLilla?? 987654321 。 全长和正确的shell,但中国的多字节字符已被replace为'?'。 瑞典的“ö”被保留。

我知道获取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());