Wie erhalte ich den Computernamen in .NET?


285

Wie erhalte ich den Computernamen in .NET c #

c#  .net 


1
@ Malachi, diese Frage bezieht sich auf Windows-Dienste.
Sam

2
@Sam Ein Windows-Dienst ist nur eine Windows-Anwendung, die im Hintergrund ausgeführt wird. Es ist also wirklich dasselbe.
Malachi

@ Malachi, ja, ich weiß was du meinst. Ich denke jedoch, dass die Verweise auf die ASP.NET-spezifischen und Winforms-spezifischen Methoden in den Antworten auf diese Frage in dieser Frage möglicherweise nicht zutreffen.
Sam

1
@ Malachi, ich denke, Sie haben falsch verstanden, was ich mit ASP.NET gemeint habe. Ich bezog mich nicht auf eine ASP.NET-Anwendung, die die Computernamen ihrer Clients abruft, obwohl dies (für den DNS-Namen) wahrscheinlich einfach ist, da die Anwendung die IP-Adressen der Clients abrufen würde. Ich bezog mich auf ASP.NET-Anwendungen, die die Namen ihrer Hostcomputer erhielten. Ein Beispiel finden Sie hier in der Antwort mit der höchsten Bewertung.
Sam

Antworten:


400

3
@tvanfosson: Was ist der Unterschied? Ich meine, welches soll ich wann verwenden? Hat dies irgendwelche Auswirkungen auf die Sicherheit?
PK

26
Ich würde die erste von einer Konsolen- oder Winforms-App verwenden, die zweite von einer Web-App und die dritte, wenn ich den vollqualifizierten Domänennamen benötigen würde. Informationen zu den erforderlichen Berechtigungen finden Sie in der Dokumentation, auf die verwiesen wird.
Tvanfosson

1
@tvanfosson Alle diese drei geben mir den Servernamen und nicht den Client-Computer, der auf die Seite zugreift. Funktioniert das so? oder mache ich etwas falsch Ich möchte den Client-Computer und nicht den Server erhalten. Ich verwende Web Forms mit asp.NET 4.0
Ryan S

2
Ich habe dies gerade getestet und festgestellt, dass der Name Dns.GetHostName() nicht vollständig qualifiziert ist.
Sam

5
Beachten Sie, dass System.Enviornment.MachineName nur den NetBIOS-Namen angibt. Wenn der Hostname also länger als 15 Zeichen ist, treten Probleme auf, wenn Sie den vollständigen Namen benötigen. Ich kann nicht für die anderen sprechen.
RandomInsano

78

System.Environment.MachineName

Wenn Sie Winforms verwenden, können Sie auch verwenden System.Windows.Forms.SystemInformation.ComputerName, das genau den gleichen Wert wie zurückgibt System.Environment.MachineName.



23

Im Folgenden werden einige Methoden angegeben, um den Computernamen oder den Computernamen abzurufen

Methode 1:-

string MachineName1 = Environment.MachineName;

Methode 2: -

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

Methode 3: -

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

Methode 4: -

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

Weitere Informationen finden Sie in meinem Blog


22
string name = System.Environment.MachineName;


15

Nun, es gibt noch einen weiteren Weg: 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

WMI-Code-Ersteller

FAQs


4

Versuche dies:

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
DNS-Name und Computername können unterschiedlich sein. Er fragt nach dem Computernamen!
Marsh-Wiggle

4

Ich setze die .InnerHtml einer <p>Klammer für mein Webprojekt auf den Computernamen des Benutzers und gehe dabei wie folgt vor:

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 weitere hilfreiche Methoden: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName"), um den Namen des PCs des Benutzers abzurufen, wenn dieser über Citrix XenApp oder Terminaldienste (auch bekannt als RDS, RDP, Remotedesktop) verbunden ist.


1

Probier diese.

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;
}

Aber warum nicht System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName verwenden?
Osexpert
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.