Как я могу получить имя компьютера в .NET


285

Как получить имя компьютера в .NET c #

c#  .net 


1
@Malachi, этот вопрос о службах Windows.
Сэм

2
@ Sam служба Windows - это просто приложение Windows, которое работает в фоновом режиме, так что на самом деле это то же самое.
Малахи

@ Малачи, да, я знаю, что ты имеешь в виду. Тем не менее, я думаю, что ссылки на ASP.NET-специфичные и Winforms-специфические способы сделать это в ответах на этот вопрос могут не относиться к этому вопросу.
Сэм

1
@ Малачи, я думаю, вы неправильно поняли, что я имел в виду под ASP.NET. Я не имел в виду приложение ASP.NET, получающее имена компьютеров своих клиентов, хотя сделать это (для имени DNS), вероятно, легко, поскольку приложение получило бы IP-адреса клиентов. Я имел в виду, что приложения ASP.NET получают имена своих компьютеров. Смотрите ответ с самым высоким рейтингом здесь для примера.
Сэм

Ответы:


400

См. Как найти FQDN локальной машины в C # /. NET? если последний не дает вам полное доменное имя, и вам это нужно.

Подробнее о различиях между SystemInformation.ComputerName, Environment.MachineName и Net.Dns.GetHostName.


3
@tvanfosson: в чем разница? Я имею в виду, какой я должен использовать когда? Имеет ли это какие-либо последствия для безопасности?
ПК

26
Я бы использовал первое из консоли или приложения winforms, второе из веб-приложения и третье, если мне нужно было получить полное доменное имя. См. Ссылочную документацию для получения информации о необходимых разрешениях.
tvanfosson

1
@tvanfosson Все эти три дают мне имя сервера, а не клиентскую машину, которая обращается к странице. Это как это работает? или я что-то делаю неправильно. Я хотел бы получить клиентскую машину, а не сервер. Я использую веб-формы с asp.NET 4.0
Райан S

2
Я только что проверил это и обнаружил, что Dns.GetHostName() не дал полное название.
Сэм

5
Обратите внимание, что System.Enviornment.MachineName только даст вам имя NetBIOS, поэтому, если имя хоста длиннее 15 символов, вы столкнетесь с проблемами, если вам понадобится полное имя. Я не могу говорить за других.
RandomInsano

78

System.Environment.MachineName

Или, если вы используете Winforms, вы можете использовать System.Windows.Forms.SystemInformation.ComputerName, который возвращает точно такое же значение, как System.Environment.MachineName.



23

Некоторые методы приведены ниже, чтобы получить имя компьютера или имя компьютера.

Способ 1: -

string MachineName1 = Environment.MachineName;

Способ 2: -

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

Способ 3: -

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

Способ 4: -

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

Для получения дополнительной информации смотрите мой блог




15

Ну, есть еще один способ: инструментарий управления 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

WMI Code Creator

Вопросы и ответы


4

Попробуй это:

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-имя и имя компьютера могут отличаться. Он спрашивает имя компьютера!
болотное движение

4

Я установил .InnerHtml <p>скобки для своего веб-проекта на имя компьютера пользователя, выполнив следующие действия:

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 полезных метода: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName"), чтобы получить имя ПК пользователя, если он подключен через Citrix XenApp или службы терминалов (RDS, RDP, удаленный рабочий стол)


1

Попробуй это.

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

Но почему бы не использовать System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName?
osexpert
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.