Comment obtenir le nom de l'ordinateur dans .NET

285

Comment obtenir le nom de l'ordinateur en .NET c #


la source
Lien vers la
Malachi
1
@Malachi, cette question concerne les services Windows.
Sam
2
@Sam un service Windows n'est qu'une application Windows qui s'exécute en arrière-plan, donc c'est vraiment la même chose.
Malachi
@Malachi, oui, je sais ce que tu veux dire. Cependant, je pense que les références aux façons spécifiques à ASP.NET et à Winforms de le faire dans les réponses à cette question pourraient ne pas s'appliquer à cette question.
Sam
1
@Malachi, je pense que vous avez mal compris ce que je voulais dire sur ASP.NET. Je ne faisais pas référence à une application ASP.NET obtenant les noms d'ordinateurs de ses clients, bien que le faire (pour le nom DNS) soit probablement facile car l'application obtiendrait les adresses IP des clients. Je faisais référence aux applications ASP.NET obtenant les noms de leurs ordinateurs hôtes. Voir la réponse la mieux notée ici pour un exemple.
Sam

Réponses:

400

Voir Comment trouver le nom de domaine complet de la machine locale dans C # /. NET? si le dernier ne vous donne pas le FQDN et que vous en avez besoin.

Voir les détails sur la différence entre SystemInformation.ComputerName, Environment.MachineName et Net.Dns.GetHostName

tvanfosson
la source
3
@tvanfosson: quelle est la différence? Je veux dire, lequel dois-je utiliser quand? Cela a-t-il des implications sur la sécurité?
PK
26
J'utiliserais le premier d'une console ou d'une application Winforms, le second d'une application Web et le troisième si j'avais besoin d'obtenir le FQDN. Consultez la documentation référencée pour plus d'informations sur les autorisations requises.
tvanfosson
1
@tvanfosson Tous ces trois m'obtiennent le nom du serveur et non la machine des clients qui accède à la page. Est-ce ainsi que cela fonctionne? ou je fais quelque chose de mal. Je voudrais obtenir la machine des clients et non le serveur. J'utilise des formulaires Web avec asp.NET 4.0
Ryan S
2
Je viens de tester cela et j'ai trouvé que Dns.GetHostName() cela ne donnait pas le nom complet.
Sam
5
Notez que System.Enviornment.MachineName ne vous donnera que le nom NetBIOS, donc si le nom d'hôte dépasse 15 caractères, vous rencontrerez des problèmes si vous avez besoin du nom complet. Je ne peux pas parler pour les autres.
RandomInsano
78

System.Environment.MachineName

Ou, si vous utilisez Winforms, vous pouvez utiliser System.Windows.Forms.SystemInformation.ComputerName, qui renvoie exactement la même valeur que System.Environment.MachineName.

Zach Johnson
la source
52
System.Environment.MachineName
AlteredConcept
la source
Aussi simple qu'une tarte en F # open system...let system_name = System.Environment.MachineName
octopusgrabbus
23

Certaines méthodes sont données ci-dessous pour obtenir le nom de la machine ou le nom de l'ordinateur

Méthode 1: -

string MachineName1 = Environment.MachineName;

Méthode 2: -

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

Méthode 3: -

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

Méthode 4: -

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

Pour plus voir mon blog

NEERAJ SRIVASTAVA
la source
22
string name = System.Environment.MachineName;
Zach
la source
15

Eh bien, il existe un autre moyen: Windows Management Instrumentation

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

Créateur de code WMI

FAQ

PRR
la source
4

Essaye ça:

string[] computer_name = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
return computer_name[0].ToString();
A Ghazal
la source
1
Le nom DNS et le nom d'ordinateur peuvent différer. Il demande le nom de l'ordinateur!
marsh-wiggle
4

J'ai défini le .InnerHtml d'un <p>support pour mon projet Web sur le nom d'ordinateur de l'utilisateur en procédant comme suit:

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;
    }
   }
}
Joe
la source
1

2 méthodes plus utiles: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName") pour obtenir le nom du PC de l'utilisateur s'il est connecté via Citrix XenApp ou Terminal Services (aka RDS, RDP, Remote Desktop)

JRrelyea
la source
1

Essaye celui-là.

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;
}
LEFOPHANA GODFREY
la source
Mais pourquoi ne pas utiliser System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName?
osexpert