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

StackOverflow https://stackoverflow.com/questions/1233217

  •  22-07-2019
  •  | 
  •  

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

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

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

注意: 我第一次看到在这个岗位列表: 如何获取本地计算机的名称?

有帮助吗?

解决方案

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

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

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

其他提示

<强> 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

有这些方法之间的重要差别。再说说你的名字你的计算机 “的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());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top