.net - Diferencia entre SystemInformation.ComputerName, Environment.MachineName y Net.Dns.GetHostName
c# get machine ip (3)
Por lo que he visto, en la documentación de MSDN y en otras preguntas aquí sobre SO, hay cuatro formas 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 devolverán sus métodos o devolverán exactamente lo mismo todo el tiempo?
Nota: La primera vez que vi la lista en esta publicación: ¿Cómo obtengo el nombre de la máquina local?
Hay algunas diferencias importantes entre estos métodos. Di que nombras tu computadora a " GöransLilla 人物 987654321 ".
Environment.MachineName devolverá GÖRANSLILLA 人物 98 . Eso está truncado y todo en mayúsculas.
Dns.GetHostName devolverá GöransLilla ?? 987654321 . Carcasa completa y correcta, pero los caracteres multibyte chinos han sido reemplazados por ''?''. El sueco ''ö'' se mantiene sin embargo.
La única forma que conozco de 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());
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 de la computadora. Al agregar un sufijo de dominio al nombre de host, puede resolver la dirección IP de su computadora a través de las LAN / en Internet.
System.Environment.GetEnvironmentVariable("COMPUTERNAME")
devuelve el nombre de equipo establecido durante la instalación. NetBIOS y el nombre de host se configuran inicialmente con el mismo nombre.
Environment.MachineName
: nombre NetBIOS de la computadora local que se lee del registro
Dns.GetHostName
: Obtiene el nombre de host de la computadora que se refiere a un nombre de dominio que tiene una o más direcciones IP asociadas.
System.Windows.Forms.SystemInformation.ComputerName
: igual que Environment.MachineName, la diferencia es que puede llamarlo desde la página web y las aplicaciones de Windows. El entorno solo se usa en las aplicaciones de Windows.
Environment.GetEnvironmentVariable
método Environment.GetEnvironmentVariable
se utiliza para recuperar la variable de entorno del proceso actual. Para obtener más información, puede consultar:
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx