如何在 .NET 中获取计算机名称

Posted

技术标签:

【中文标题】如何在 .NET 中获取计算机名称【英文标题】:How do I get the computer name in .NET 【发布时间】:2010-12-18 14:23:38 【问题描述】:

如何在 .NET c# 中获取计算机名称

【问题讨论】:

重复问题link @Malachi,这个问题是关于 Windows 服务的。 @Sam 一个 windows 服务只是一个在后台运行的 windows 应用程序,所以实际上是一回事。 @Malachi,是的,我知道你的意思。但是,我认为在此问题的答案中对特定于 ASP.NET 和特定于 Winforms 的执行方式的引用可能不适用于该问题。 @Malachi,我想你误解了我对 ASP.NET 的意思。我指的不是 ASP.NET 应用程序获取其客户端的计算机名称,尽管这样做(对于 DNS 名称)可能很容易,因为应用程序将获取客户端的 IP 地址。我指的是获取主机名称的 ASP.NET 应用程序。在此处查看评分最高的答案以获取示例。 【参考方案1】: System.Environment.MachineName 来自控制台或 WinForms 应用程序。 HttpContext.Current.Server.MachineName 来自网络应用 System.Net.Dns.GetHostName() 获取 FQDN

如果最后一个没有为您提供 FQDN 而您需要它,请参阅 How to find FQDN of local machine in C#/.NET ?。

查看Difference between SystemInformation.ComputerName, Environment.MachineName, and Net.Dns.GetHostName的详细信息

【讨论】:

@tvanfosson:有什么区别?我的意思是,我应该在什么时候使用哪一个?这是否有任何安全隐患? 我会使用控制台或 winforms 应用程序中的第一个,Web 应用程序中的第二个,如果我需要获取 FQDN,则使用第三个。有关所需权限的信息,请参阅参考文档。 @tvanfosson 所有这三个都让我得到服务器名称,而不是访问页面的客户端机器。这是它的工作原理吗?还是我做错了什么。我想获得客户端机器,而不是服务器。我正在使用带有 asp.NET 4.0 的 Web 表单 我刚刚对此进行了测试,发现Dns.GetHostName() 没有给出完全限定的名称。 请注意,System.Enviornment.MachineName 只会为您提供 NetBios 名称,因此如果主机名超过 15 个字符,如果您需要全名,则会遇到问题。我不能代表其他人。【参考方案2】:

System.Environment.MachineName

或者,如果您使用的是 Winforms,则可以使用 System.Windows.Forms.SystemInformation.ComputerName,它返回的值与 System.Environment.MachineName 完全相同。

【讨论】:

【参考方案3】:
System.Environment.MachineName

【讨论】:

像 F# 中的馅饼一样简单 open system ... let system_name = System.Environment.MachineName【参考方案4】:

下面给出了一些获取机器名或计算机名的方法

方法一:-

string MachineName1 = Environment.MachineName;

方法二:-

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

方法三:-

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

方法四:-

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

了解更多see my blog

【讨论】:

当Hostname超过15个字符时,这个方法会返回不同的名字! 博客链接未提供有关此答案中提到的 API 的更多信息。所以我认为不应该在这里添加。【参考方案5】:
string name = System.Environment.MachineName;

【讨论】:

【参考方案6】:

还有一种方法: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 creator

FAQs

【讨论】:

【参考方案7】:

您可以使用Environment.MachineName 访问机器名称。

【讨论】:

【参考方案8】:

试试这个:

string[] computer_name = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["remote_addr"]).HostName.Split(new Char[]  '.' );
return computer_name[0].ToString();

【讨论】:

DNS 名称和计算机名称可能不同。他在问计算机名!【参考方案9】:

我将我的 Web 项目的 <p> 括号的 .Innerhtml 设置为用户的计算机名称,执行以下操作:

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;
    
   

【讨论】:

【参考方案10】:

另外2个有用的方法: System.Environment.GetEnvironmentVariable("ComputerName")

System.Environment.GetEnvironmentVariable("ClientName" ) 获取通过 Citrix XenApp 或终端服务(又名 RDS、RDP、远程桌面)连接的用户 PC 的名称

【讨论】:

【参考方案11】:

试试这个。

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?【参考方案12】:

用这一行就简单了

Environment.MachineName;

【讨论】:

以上是关于如何在 .NET 中获取计算机名称的主要内容,如果未能解决你的问题,请参考以下文章

获取计算机名称[重复]

Java如何获取本地计算机的IP地址和主机名?

获取 Windows 用户显示名称

如何获取本机电脑的AD域名称

获取计算机名

计算机网络上有重名是啥意思?如何更改!