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

时间:2009-08-05 13:19:20

标签: .net windows hostname

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

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

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

注意: 我第一次看到这篇文章中的列表: How do I get the local machine Name?

3 个答案:

答案 0 :(得分:49)

Environment.MachineNameSystem.Windows.Forms.SystemInformation.ComputerName相同,并返回计算机的NetBIOS名称。此名称限制为15个字符,仅在LAN上可见。

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

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

答案 1 :(得分:14)

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

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

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

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

答案 2 :(得分:10)

这些方法之间存在一些重要的差异。假设您将计算机命名为“GöransLilla人物987654321 ”。
然后 Environment.MachineName 将返回GÖRANSLILLA人物98 。这是截断的,都是大写的 Dns.GetHostName 将返回Gö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());