Diferencia entre SystemInformation.ComputerName, Environment.MachineName, y Net.Dns.GetHostName


Por lo que he visto, en la documentación de MSDN y en otras preguntas aquí, hay cuatro maneras de obtener el nombre de la máquina local.

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

¿Hay una diferencia en lo que los métodos devolverán o todos ellos devolverán exactamente lo mismo todo el tiempo?

Nota: La primera vez que vi la lista en este post: ¿Cómo obtengo el nombre de la máquina local?

Author: Community, 2009-08-05

3 answers

Environment.MachineName y System.Windows.Forms.SystemInformation.ComputerName son idénticos y devuelve el nombre NetBIOS de la computadora. Este nombre está restringido a 15 caracteres y solo es visible en la LAN.

System.Net.Dns.GetHostName() devuelve el nombre de host basado en TCP/IP del equipo. Al agregar un sufijo de dominio al nombre de host, puede resolver la dirección IP de su computadora a través de LAN / en Internet.

System.Environment.GetEnvironmentVariable("COMPUTERNAME") devuelve el nombre del equipo establecido durante la instalación. NetBIOS y hostname se establecen inicialmente con el mismo nombre.

 44
Author: EventHorizon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-11 10:01:50

Environment.MachineName : NetBIOS nombre del equipo local leído desde el registro

Dns.GetHostName : Obtiene el nombre de host del equipo que se refiere a un nombre de dominio que tiene una o más direcciones IP asociadas.

System.Windows.Forms.SystemInformation.ComputerName : igual que el Medio ambiente.MachineName, la diferencia es que puede llamar a esto desde la página web y las aplicaciones de Windows.Entorno se utiliza solo aplicaciones de Windows.

Environment.GetEnvironmentVariable método se utiliza para recuperar la variable de entorno del proceso actual.Para más información, usted puede mirar en :
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx

 14
Author: Myra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-05 14:01:41

Hay algunas diferencias importantes entre estos métodos. Dicen que el nombre de su equipo "GöransLilla人物987654321".
medio Ambiente.MachineName luego devolverá GÖRANSLILLA人998. Eso está truncado y todo en mayúsculas.
Dns.GetHostName will return GöransLilla??987654321. Longitud completa y carcasa correcta, pero los caracteres multibyte chinos han sido reemplazados por '?'. El ' ö ' sueco se mantiene sin embargo.

La única manera que conozco obtener el nombre real como se especifica en Windows es con 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());
 7
Author: Göran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-28 08:50:37