Come posso ottenere il nome del computer in .NET


285

Come posso ottenere il nome del computer in .NET c #

c#  .net 


1
@Malachi, quella domanda riguarda i servizi di Windows.
Sam,

2
@Sam un servizio Windows è solo un'applicazione Windows che viene eseguita in background, quindi è davvero la stessa cosa.
Malachi,

@ Malachia, sì, so cosa intendi. Tuttavia, penso che i riferimenti ai modi specifici di ASP.NET e specifici di Winforms per fare ciò nelle risposte a questa domanda potrebbero non applicarsi in quella domanda.
Sam,

1
@Malachi, penso che tu abbia capito male cosa intendevo su ASP.NET. Non mi riferivo a un'applicazione ASP.NET che ottenne i nomi dei computer dei suoi client, sebbene farlo (per il nome DNS) sia probabilmente facile poiché l'applicazione otterrebbe gli indirizzi IP dei client. Mi riferivo alle applicazioni ASP.NET che ottengono i nomi dei loro computer host. Vedi la risposta più votata qui per un esempio.
Sam,

Risposte:


400

3
@tvanfosson: qual è la differenza? Voglio dire, quale dovrei usare quando? Ciò ha implicazioni per la sicurezza?
PK,

26
Vorrei utilizzare il primo da una console o un'app Winforms, il secondo da un'app Web e il terzo se avessi bisogno di ottenere il nome FQDN. Consultare la documentazione di riferimento per informazioni sulle autorizzazioni richieste.
tvanfosson,

1
@tvanfosson Tutti e tre questi mi danno il nome del server e non la macchina client che sta accedendo alla pagina. è così che funziona? o sto facendo qualcosa di sbagliato. Vorrei ottenere la macchina client e non il server. Sto utilizzando i moduli Web con asp.NET 4.0
Ryan S

2
Ho appena provato questo e ho scoperto che Dns.GetHostName() non ha dato il nome completo.
Sam,

5
Nota che System.Enviornment.MachineName ti darà solo il nome NetBIOS, quindi se il nome host è più lungo di 15 caratteri, colpirai i problemi se hai bisogno del nome completo. Non posso parlare per gli altri.
Casuale Insano

78

System.Environment.MachineName

Oppure, se si utilizza Winforms, è possibile utilizzare System.Windows.Forms.SystemInformation.ComputerName, che restituisce esattamente lo stesso valore di System.Environment.MachineName.



23

Di seguito sono riportati alcuni metodi per ottenere il nome della macchina o il nome del computer

Metodo 1: -

string MachineName1 = Environment.MachineName;

Metodo 2: -

string MachineName2 = System.Net.Dns.GetHostName();

Metodo 3: -

string MachineName3 = Request.ServerVariables["REMOTE_HOST"].ToString();

Metodo 4: -

string MachineName4 = System.Environment.GetEnvironmentVariable("COMPUTERNAME");

Per di più vedi il mio blog


22
string name = System.Environment.MachineName;


15

Bene, c'è un altro modo: Strumentazione gestione Windows

using System.Management;

try
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\CIMV2",
                "SELECT Name FROM Win32_ComputerSystem");

            foreach (ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Win32_ComputerSystem instance");
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Name: {0}", queryObj["Name"]);
            }
        }
        catch (ManagementException e)
        {
            // exception handling
        }

MSDN

WMI

Creatore di codice WMI

FAQs


4

Prova questo:

string[] computer_name = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
return computer_name[0].ToString();

1
Il nome DNS e il nome computer possono essere diversi. Chiede il nome del computer!
marsh-wiggle,

4

Ho impostato .InnerHtml di una <p>parentesi per il mio progetto Web sul nome del computer dell'utente nel modo seguente:

HTML:

    <div class="col-md-4">
       <h2>Your Computer Name Is</h2>
       <p id="pcname" runat="server"></p>
       <p>
           <a class="btn btn-default" href="#">Learn more &raquo;</a>
       </p>
    </div>

C #:

using System;
using System.Web.UI;

namespace GetPCName {
   public partial class _Default : Page {
    protected void Page_Load(object sender, EventArgs e) {            
        pcname.InnerHtml = Environment.MachineName;
    }
   }
}

1

2 metodi più utili: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName") per ottenere il nome del PC dell'utente se sono connessi tramite Citrix XenApp o Servizi terminal (aka RDS, RDP, Desktop remoto)


1

Prova questo.

public static string GetFQDN()
{
    string domainName = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
    string hostName = Dns.GetHostName();
    string fqdn;
    if (!hostName.Contains(domainName))
        fqdn = hostName + "." +domainName;
    else
        fqdn = hostName;

    return fqdn;
}

Ma perché non usare System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). Nomehost?
osexpert,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.