Разница между информацией о системе.Имя компьютера, среда.Имя машины и Net.Dns.GetHostName
Вопрос
Из того, что я видел в документации 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 символов и видно только в локальной сети.
System.Net.Dns.GetHostName()
возвращает имя хоста компьютера на основе TCP/IP.Добавив доменный суффикс к имени хоста, вы можете определить IP-адрес вашего компьютера по локальным сетям / в Интернете.
System.Environment.GetEnvironmentVariable("COMPUTERNAME")
возвращает имя компьютера, заданное во время установки.NetBIOS и hostname изначально имеют одно и то же имя.
Другие советы
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
Между этими методами есть некоторые важные различия.Скажите, что вы называете свой компьютер "Геранслилла人物987654321".
Окружающая среда.Имя машины затем вернется ГЕРАНСЛИЛЛА人物98.То есть усеченный и весь в верхнем регистре.
Dns.Получить имя хоста вернется ГерансЛилла??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());