Разница между информацией о системе.Имя компьютера, среда.Имя машины и 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 символов и видно только в локальной сети.

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());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top