这些方法之间有一些重要的区别。假设您将计算机命名为“ 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());