Як отримати ім'я комп'ютера в .NET


285

Як отримати ім'я комп'ютера в .NET c #

c#  .net 


1
@Malachi, це питання стосується служб Windows.
Сем

2
@Sam служба Windows - це просто програма для Windows, яка працює у фоновому режимі, так що насправді це те саме.
Малахій

@Malachi, так, я знаю, що ти маєш на увазі. Однак я думаю, що посилання на специфічні для ASP.NET та Winforms способи цього у відповідях на це питання можуть не застосовуватися до цього питання.
Сем

1
@Malachi, я думаю, ви неправильно зрозуміли, що я мав на увазі про ASP.NET. Я не мав на увазі, що програма ASP.NET отримує імена комп'ютерів своїх клієнтів, хоча це зробити (для імені DNS), мабуть, просто, оскільки програма отримає IP-адреси клієнтів. Я мав на увазі програми ASP.NET, отримуючи імена своїх хост-комп'ютерів. Тут див. Приклад відповіді з найвищим рейтингом.
Сем

Відповіді:


400

Див. Як знайти FQDN локальної машини в C # /. NET? якщо останній не дає вам FQDN, і він вам потрібен.

Докладніше про різницю між SystemInformation.ComputerName, Environment.MachineName та Net.Dns.GetHostName


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

26
Я використовував би перший із консолі чи програми winforms, другий із веб-програми та третій, якщо мені знадобиться отримати FQDN. Інформацію про необхідні дозволи див. У посиланій документації.
tvanfosson

1
@tvanfosson Усі ці троє отримують мені ім'я сервера, а не клієнтську машину, яка переходить на сторінку. Це, як це працює? чи я роблю щось неправильно. Я хотів би отримати клієнтську машину, а не сервер. Я використовую веб-форми з asp.NET 4.0
Ryan 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

FAQ


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 або служби терміналів (aka RDS, RDP, Remote Desktop)


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?
Осексперт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.