SystemInformation.ComputerName,Environment.Machine

2019-06-28 01:07发布

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

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

是否有差异性在他们的方法将返回或将它们都返回同样的事情所有的时间?

注:我第一次看到名单在这篇文章: 如何获取本地计算机的名称?

Answer 1:

Environment.MachineNameSystem.Windows.Forms.SystemInformation.ComputerName是相同的,并返回该计算机的NetBIOS名称。 这名被限制为15个字符,只在局域网上可见。

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

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



Answer 2:

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

Dns.GetHostName :获取计算机的主机名是指具有一个或多个关联的IP不会忽略一个域名。

System.Windows.Forms.SystemInformation.ComputerName :同Environment.MachineName,差异可以从两个网页和窗口applications.Environment称这个只使用Windows应用程序。

Environment.GetEnvironmentVariable方法用于检索从目前的过程。对于更多的信息环境变量,你可以看一下:
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx



Answer 3:

有这些方法之间的一些重要差异。 再说说你的名字你的计算机“GöransLilla人物987654321”。
然后Environment.MachineName将返回GÖRANSLILLA人物98。 被截断,并全部大写。
Dns.GetHostName将返回GöransLilla?? 987654321。 全长和正确的外壳,但中国的多字节字符都被替换为“?”。 瑞典“O”是虽然保持。

我知道,在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());


文章来源: Difference between SystemInformation.ComputerName, Environment.MachineName, and Net.Dns.GetHostName