2009-08-05 4 views
43

Da quanto ho visto, nella documentazione MSDN e in altre domande qui su SO, ci sono quattro modi per ottenere il nome del computer locale.Differenza tra SystemInformation.ComputerName, Environment.MachineName e Net.Dns.GetHostName

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

C'è una differnece in quello che ritorneranno essi metodi o saranno tutti tornare la stessa cosa per tutto il tempo?

Nota: ho visto la prima volta la lista in questo post: How do I get the local machine Name?

risposta

39

Environment.MachineName e System.Windows.Forms.SystemInformation.ComputerName sono identiche e restituisce il nome NetBIOS del computer. Questo nome è limitato a 15 caratteri e visibile solo sulla LAN.

System.Net.Dns.GetHostName() restituisce il nome host TCP/IP del computer. Aggiungendo un suffisso di dominio al nome host è possibile risolvere l'indirizzo IP del computer su LAN/su Internet.

System.Environment.GetEnvironmentVariable("COMPUTERNAME") restituisce il nome del computer impostato durante l'installazione. NetBIOS e il nome host sono inizialmente impostati sullo stesso nome.

+2

non Vuol 'System.Environment.GetEnvironmentVariable ("NOMECOMPUTER")' restituire ciò che il nome del computer variabile d'ambiente è impostata, e non il NetBIOS? Le variabili d'ambiente possono essere manipolate abbastanza facilmente dal codice, quindi potrebbe essere stato impostato su qualcosa di diverso da quello riportato nel NetBIOS. – StarPilot

13

Environment.MachineName: nome NetBIOS del computer locale letta dal registro

Dns.GetHostName: Ottiene il nome host del computer che si riferisce alla un nome di dominio che ha uno o più indirizzi IP associati.

System.Windows.Forms.SystemInformation.ComputerName: come Environment.MachineName, differenza è che si può chiamare questo sia da pagine web e finestre applications.Environment viene utilizzato solo applicazioni Windows.

Environment.GetEnvironmentVariable metodo viene utilizzato per recuperare variabile d'ambiente dalle informazioni attuali process.For di più, si può guardare:
http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx

3

Ci sono alcune importanti differenze tra questi metodi. Dì che chiami il tuo computer in "GöransLilla 人物 987654321".
Environment.MachineName restituirà quindi GÖRANSLILLA 人物 98. Quello è troncato e tutto in maiuscolo.
Dns.GetHostName restituirà GöransLilla ?? 987654321. Involucro completo e corretto ma i caratteri multibyte cinesi sono stati sostituiti con '?'. Lo "ö" svedese è comunque tenuto.

L'unico modo per sapere come ottenere il nome effettivo specificato in Windows è 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()); 
+1

OK, ho seguito il collegamento nel primo post e ho scoperto che System.Net.Dns.GetHostEntry ("localhost"). HostName restituisce anche i caratteri cinesi correttamente.Quindi si differenzia da GetHostName in questo senso ed è una buona alternativa a pinvoke. –