62 votes

Différence entre SystemInformation.ComputerName, Environment.MachineName, et Net.DNS.GetHostName

D'après ce que j'ai vu, dans la documentation MSDN et dans d'autres questions posées ici sur SO, il y a quatre façons d'obtenir le nom de la machine locale.

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

Y a-t-il une différence dans ce que ces méthodes vont retourner ou vont-elles toutes retourner exactement la même chose tout le temps ?

Note : J'ai vu la liste pour la première fois dans ce post : Comment puis-je obtenir le nom de la machine locale ?

62voto

Dag Points 1401

Environment.MachineName y System.Windows.Forms.SystemInformation.ComputerName sont identiques et renvoie le nom NetBIOS de l'ordinateur. Ce nom est limité à 15 caractères et n'est visible que sur le réseau local.

System.Net.Dns.GetHostName() renvoie le nom d'hôte de l'ordinateur basé sur TCP/IP. En ajoutant un suffixe de domaine au nom d'hôte, vous pouvez résoudre l'adresse IP de votre ordinateur sur les réseaux locaux ou sur Internet.

System.Environment.GetEnvironmentVariable("COMPUTERNAME") renvoie le nom de l'ordinateur défini lors de l'installation. NetBIOS et le nom d'hôte sont initialement définis sur le même nom.

5 votes

Non. System.Environment.GetEnvironmentVariable("COMPUTERNAME") retourner la variable d'environnement COMPUTERNAME, et non le NetBIOS ? Les variables d'environnement peuvent être manipulées assez facilement à partir du code, et il se peut donc que la variable ait été définie sur une valeur différente de celle indiquée dans le NetBIOS.

4 votes

@StarPilot, oui, "Environment.MachineName" renvoie en fait la variable env "COMPUTERNAME" (et est en lecture seule).

16voto

Göran Points 181

Il existe quelques différences importantes entre ces méthodes. Disons que vous donnez à votre ordinateur le nom de " GöransLilla987654321 ".
Environnement.Nom de la machine retournera alors GÖRANSLILLA98 . C'est tronqué et tout en majuscules.
Dns.GetHostName retournera GöransLilla??987654321 . Longueur totale et casse correcte, mais les caractères multi-octets chinois ont été remplacés par " ?". Le 'ö' suédois est toutefois conservé.

La seule façon que je connaisse d'obtenir le nom réel tel que spécifié dans Windows est avec 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());

14voto

Myra Points 2509

Environment.MachineName : Nom NetBIOS de l'ordinateur local lu à partir du registre

Dns.GetHostName : Obtient le nom d'hôte de l'ordinateur qui fait référence à un nom de domaine auquel sont associées une ou plusieurs adresses IP.

System.Windows.Forms.SystemInformation.ComputerName : même chose que Environment.MachineName, la différence est que vous pouvez l'appeler à partir d'une page web ou d'une application Windows. Environment est utilisé uniquement par les applications Windows.

Environment.GetEnvironmentVariable est utilisée pour récupérer les variables d'environnement du processus en cours. Pour plus d'informations, vous pouvez consulter le site :
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X