Jak uzyskać nazwę komputera w .NET


285

Jak uzyskać nazwę komputera w .NET c #

c#  .net 


1
@Malachi, to pytanie dotyczy usług Windows.
Sam

2
@Sam usługa Windows to tylko aplikacja Windows, która działa w tle, więc tak naprawdę to to samo.
Malachi

@Malachi, tak, wiem o co ci chodzi. Myślę jednak, że odniesienia do specyficznych dla ASP.NET i Winforms sposobów wykonywania tego w odpowiedziach na to pytanie mogą nie mieć zastosowania w tym pytaniu.
Sam

1
@Malachi, myślę, że źle zrozumiałeś, co miałem na myśli o ASP.NET. Nie odnosiłem się do aplikacji ASP.NET, która otrzymywała nazwy komputerów swoich klientów, chociaż robienie tego (dla nazwy DNS) jest prawdopodobnie łatwe, ponieważ aplikacja uzyskiwałaby adresy IP klientów. Miałem na myśli aplikacje ASP.NET, które otrzymały nazwy swoich komputerów-hostów. Zobacz najwyżej ocenioną odpowiedź tutaj na przykład.
Sam

Odpowiedzi:


400

Zobacz Jak znaleźć nazwę FQDN lokalnego komputera w C # / .NET? jeśli ostatni nie daje nazwy FQDN i jest ona potrzebna.

Zobacz szczegółowe informacje na temat różnicy między SystemInformation.ComputerName, Environment.MachineName i Net.Dns.GetHostName


3
@tvanfosson: jaka jest różnica? Mam na myśli, którego powinienem użyć, kiedy? Czy ma to wpływ na bezpieczeństwo?
PK

26
Korzystałbym z pierwszej z konsoli lub aplikacji WinForm, drugiej z aplikacji internetowej i trzeciej, jeśli potrzebowałem uzyskać nazwę FQDN. Informacje na temat wymaganych uprawnień znajdują się w odnośnej dokumentacji.
tvanfosson,

1
@tvanfosson Wszystkie te trzy dają mi nazwę serwera, a nie komputer klienta, który uzyskuje dostęp do strony. Czy tak to działa? czy robię coś niepoprawnie. Chciałbym uzyskać maszynę klienta, a nie serwer. Korzystam z formularzy internetowych z asp.NET 4.0
Ryan S,

2
Właśnie to przetestowałem i okazało się, że Dns.GetHostName() nie dało to w pełni kwalifikowanej nazwy.
Sam

5
Zauważ, że System.Enviornment.MachineName da ci tylko nazwę NetBIOS, więc jeśli nazwa hosta jest dłuższa niż 15 znaków, napotkasz problemy, jeśli potrzebujesz pełnej nazwy. Nie mogę mówić za innych.
RandomInsano

78

System.Environment.MachineName

Lub, jeśli używasz Winforms, możesz użyć System.Windows.Forms.SystemInformation.ComputerName, który zwraca dokładnie taką samą wartość jak System.Environment.MachineName.



23

Poniżej podano niektóre metody uzyskiwania nazwy komputera lub komputera

Metoda 1: -

string MachineName1 = Environment.MachineName;

Metoda 2: -

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

Metoda 3: -

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

Metoda 4: -

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

Więcej informacji na moim blogu




15

Jest jeszcze jeden sposób: Instrumentacja zarządzania 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

Twórca kodu WMI

FAQ


4

Spróbuj tego:

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
Nazwa DNS i nazwa komputera mogą się różnić. On prosi o nazwę komputera!
marsh-wiggle

4

Ustawiam .InnerHtml <p>nawiasu dla mojego projektu internetowego na nazwę komputera użytkownika, wykonując następujące czynności:

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>

DO#:

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 dodatkowe pomocne metody: System.Environment.GetEnvironmentVariable („ComputerName”)

System.Environment.GetEnvironmentVariable („ClientName”), aby uzyskać nazwę komputera użytkownika, jeśli są one połączone za pomocą Citrix XenApp lub usług terminalowych (inaczej RDS, RDP, Pulpit zdalny)


1

Spróbuj tego.

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

Ale dlaczego nie użyć System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName?
osexpert
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.