Wie erhalte ich den Computernamen in .NET?

285

Wie erhalte ich den Computernamen in .NET c #


quelle
Link zur
Malachi
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

Siehe So finden Sie den vollqualifizierten Domänennamen des lokalen Computers in C # /. NET? Wenn der letzte Ihnen den FQDN nicht gibt und Sie ihn brauchen.

Weitere Informationen zum Unterschied zwischen SystemInformation.ComputerName, Environment.MachineName und Net.Dns.GetHostName

Tvanfosson
quelle
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.

Zach Johnson
quelle
52
System.Environment.MachineName
AlteredConcept
quelle
So einfach wie Kuchen in F # open system...let system_name = System.Environment.MachineName
Octopusgrabbus
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

NEERAJ SRIVASTAVA
quelle
22
string name = System.Environment.MachineName;
Zach
quelle
16

Sie können über Environment.MachineName auf den Computernamen zugreifen .

CesarGon
quelle
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

PRR
quelle
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();
Ein Ghazal
quelle
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;
    }
   }
}
Joe
quelle
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.

JRrelyea
quelle
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;
}
LEFOPHANA GODFREY
quelle
Aber warum nicht System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName verwenden?
Osexpert