【问题标题】:How do I get the computer name in .NET如何在 .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 应用程序。在此处查看评分最高的答案以获取示例。

标签: c# .net


【解决方案1】:

如果最后一个没有为您提供 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;
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2022-10-17
                • 2017-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-04-02
                相关资源
                最近更新 更多