62

据我所见,在 MSDN 文档和其他关于 SO 的问题中,有四种方法可以获取本地机器名称。

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

它们的方法将返回的内容是否存在差异,或者它们是否会一直返回完全相同的东西?

注意:我第一次看到这篇文章的列表: 如何获取本地机器名称?

4

3 回答 3

63

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

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

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

于 2009-08-05T14:02:42.203 回答
16

这些方法之间有一些重要的区别。假设您将计算机命名为“ 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());
于 2017-06-28T08:50:37.267 回答
14

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

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

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

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

于 2009-08-05T14:01:41.720 回答