Разница между SystemInformation.ComputerName, Environment.MachineName и Net.Dns.GetHostName
Из того, что я видел, в документации MSDN и в других вопросах здесь, в SO, есть четыре способа получить имя локальной машины.
Environment.MachineName;
System.Net.Dns.GetHostName();
System.Windows.Forms.SystemInformation.ComputerName;
System.Environment.GetEnvironmentVariable("COMPUTERNAME");
Есть ли разница в том, что они вернут методам, или все они будут возвращать то же самое все время?
Примечание:
Я впервые увидел список в этом посте:
Как получить имя локальной машины?
Ответы
Ответ 1
Environment.MachineName
и System.Windows.Forms.SystemInformation.ComputerName
идентичны и возвращают имя компьютера NetBIOS. Это имя ограничено 15 символами и отображается только в локальной сети.
System.Net.Dns.GetHostName()
возвращает имя компьютера на основе TCP/IP. Добавив суффикс домена к имени хоста, вы можете разрешить IP-адрес своего компьютера через локальные сети/в Интернете.
System.Environment.GetEnvironmentVariable("COMPUTERNAME")
возвращает имя компьютера, установленное во время установки. Первоначально NetBIOS и имя хоста установлены с тем же именем.
Ответ 2
Environment.MachineName
: имя NetBIOS локального компьютера, считанное из реестра
Dns.GetHostName
: получает имя компьютера, которое относится к доменному имени, имеющему один или несколько связанных IP-адресов.
System.Windows.Forms.SystemInformation.ComputerName
: то же самое, что и Environment.MachineName, разница заключается в том, что вы можете вызывать это как из веб-страниц, так и из окон. В среде используются только приложения Windows.
Environment.GetEnvironmentVariable
метод используется для извлечения переменной среды из текущего процесса. Для получения дополнительной информации вы можете посмотреть:
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx
Ответ 3
Существуют некоторые важные различия между этими методами. Скажите, что вы называете свой компьютер "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());