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.