SystemInformation.ComputerName、Environment.MachineName和Net.Dns.GetHostName的区别

62

从我所看到的MSDN文档和其他一些Stack Overflow上的问题中,获取本地计算机名称有四种方法。

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

它们的返回值有区别吗,还是说它们每次都会返回完全相同的内容?

注意: 我第一次在这篇帖子中看到了这个列表: 如何获取本地机器名称?

3个回答

66

Environment.MachineNameSystem.Windows.Forms.SystemInformation.ComputerName 是相同的,它们返回计算机的NetBIOS名称。此名称仅限于15个字符,并且只在局域网内可见。

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

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


5
System.Environment.GetEnvironmentVariable("COMPUTERNAME")返回的是环境变量COMPUTERNAME的值,而不是NetBIOS。从代码中可以很容易地操作环境变量,因此它可能被设置为与NetBIOS报告的值不同的值。请注意,此处不进行解释或添加额外内容。 - StarPilot
4
@StarPilot,是的,“Environment.MachineName”实际上返回“COMPUTERNAME”环境变量(并且是只读的)。 - galaxis

18

这些方法之间存在一些重要的区别。假设你将计算机命名为"GöransLilla人物987654321"。
Environment.MachineName 将返回缩短并全部大写的名称,即GÖRANSLILLA人物98
Dns.GetHostName 将返回完整长度和正确大小写的名称,但中文多字节字符已被替换为'?',而瑞典语的'ö'仍然保留。

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

10
好的,我跟随第一篇帖子中的链接,并发现 System.Net.Dns.GetHostEntry("localhost").HostName 实际上也能正确返回中文字符。因此,它在这方面与 GetHostName 不同,并且是 pinvoke 的一个很好的替代选择。 - Göran

14

Environment.MachineName :从注册表读取本地计算机的NetBIOS名称。

Dns.GetHostName :获取计算机的主机名,它是指具有一个或多个相关联IP地址的域名。

System.Windows.Forms.SystemInformation.ComputerName :与Environment.MachineName相同,不同之处在于您可以从Web页面和Windows应用程序中调用此方法。而Environment只能用于Windows应用程序。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接