Làm thế nào để tôi có được tên máy tính trong .NET


285

Làm cách nào để có được tên máy tính trong .NET c #

c#  .net 


1
@Malachi, câu hỏi đó là về các dịch vụ Windows.
Sam

2
@Sam một dịch vụ windows chỉ là một ứng dụng windows chạy trong nền, vì vậy thực sự đó là điều tương tự.
Malachi

@Malachi, yeah, tôi hiểu ý của bạn. Tuy nhiên, tôi nghĩ rằng các tài liệu tham khảo về các cách cụ thể của ASP.NET và Winforms để thực hiện điều này trong các câu trả lời cho câu hỏi này có thể không áp dụng trong câu hỏi đó.
Sam

1
@Malachi, tôi nghĩ bạn đã hiểu nhầm ý của tôi về ASP.NET. Tôi đã không đề cập đến một ứng dụng ASP.NET lấy tên máy tính của khách hàng, mặc dù làm như vậy (đối với tên DNS) có thể dễ dàng vì ứng dụng sẽ lấy địa chỉ IP của khách hàng. Tôi đã đề cập đến các ứng dụng ASP.NET lấy tên máy tính chủ của chúng. Xem câu trả lời được đánh giá cao nhất ở đây để biết ví dụ.
Sam

Câu trả lời:


400

Xem Cách tìm FQDN của máy cục bộ trong C # /. NET? nếu cái cuối cùng không cung cấp cho bạn FQDN và bạn cần nó.

Xem chi tiết về Sự khác biệt giữa SystemIn information.ComputerName, Môi trường.MachineName và Net.Dns.GethostName


3
@tvanfosson: sự khác biệt là gì? Ý tôi là, tôi nên sử dụng cái nào khi nào? Điều này có bất kỳ ý nghĩa bảo mật?
PK

26
Tôi sẽ sử dụng cái đầu tiên từ bảng điều khiển hoặc ứng dụng winforms, cái thứ hai từ ứng dụng web và thứ ba nếu tôi cần để lấy FQDN. Xem tài liệu tham khảo để biết thông tin về các quyền cần thiết.
tvanfosson

1
@tvanfosson Tất cả ba người này đều cho tôi biết tên máy chủ chứ không phải máy khách đang truy cập trang. Đây có phải là cách nó hoạt động? hoặc tôi đang làm một cái gì đó không chính xác. Tôi muốn có được máy khách chứ không phải máy chủ. Tôi đang sử dụng Biểu mẫu web với asp.NET 4.0
Ryan S

2
Tôi chỉ thử nghiệm điều này và thấy rằng Dns.GetHostName() không cung cấp tên đủ điều kiện.
Sam

5
Lưu ý rằng System.Enviornment.MachineName sẽ chỉ cung cấp cho bạn tên NetBIOS, vì vậy nếu tên máy chủ dài hơn 15 ký tự, bạn sẽ gặp sự cố nếu bạn cần tên đầy đủ. Tôi không thể nói cho người khác.
RandomInsano

78

System.Environment.MachineName

Hoặc, nếu bạn đang sử dụng Winforms, bạn có thể sử dụng System.Windows.Forms.SystemInformation.ComputerName, trả về chính xác cùng giá trị như System.Environment.MachineName.



23

Một số phương pháp được đưa ra dưới đây để có được tên máy hoặc tên máy tính

Cách 1: -

string MachineName1 = Environment.MachineName;

Cách 2: -

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

Cách 3: -

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

Cách 4: -

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

Để biết thêm xem blog của tôi


22
string name = System.Environment.MachineName;


15

Vâng, có một cách nữa: Thiết bị quản lý 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

Người tạo mã WMI

Câu hỏi thường gặp


4

Thử cái này:

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
Tên DNS và tên máy tính có thể khác nhau. Anh ấy yêu cầu tên máy tính!
đầm lầy-lắc lư

4

Tôi đặt .InnerHtml của một <p> ngoặc cho dự án web của mình thành tên máy tính của người dùng thực hiện như sau:

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 phương thức hữu ích khác: System.En Môi.GetEn MôiVariable ("ComputerName")

System.En Môi.GetEn MôiVariable ("ClientName") để lấy tên PC của người dùng nếu họ được kết nối qua Citrix XenApp hoặc Terminal Services (còn gọi là RDS, RDP, Remote Desktop)


1

Hãy thử cái này

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

Nhưng tại sao không sử dụng System.Net.NetworkIn information.IPGlobalProperIES.GetIPGlobalProperIES (). HostName?
osexpert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.