从我所看到的,在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?
答案 0 :(得分:49)
Environment.MachineName
和System.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());