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


285

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

c#  .net 

重复的问题链接
Malachi

1
@Malachi,该问题与Windows服务有关。
2013年

2
@Sam Windows服务只是在后台运行的Windows应用程序,所以实际上是同一回事。
玛拉基2013年

@Malachi,是的,我知道你的意思。但是,我认为在此问题的答案中对ASP.NET特定和Winforms特定方法的引用可能不适用于该问题。
2013年

1
@Malachi,我认为您误解了我对ASP.NET的理解。我指的不是ASP.NET应用程序获取其客户端的计算机名称,尽管这样做(对于DNS名称)可能很容易,因为该应用程序将获取客户端的IP地址。我指的是ASP.NET应用程序,以获取其主机名。有关示例,请参见此处评分最高的答案。
2013年

Answers:


400

3
@tvanfosson:有什么区别?我的意思是,什么时候应该使用哪个?这对安全性有影响吗?
PK

26
如果要获取FQDN,我将使用控制台或winforms应用程序中的第一个,使用Web应用程序中的第二个,使用第三个。有关所需权限的信息,请参见参考文档。
tvanfosson

1
@tvanfosson这三个全都给我服务器名称,而不是正在访问该页面的客户端计算机。这是怎么运作的?还是我做错了什么。我想获得客户端计算机,而不是服务器。我正在使用带有ASP.NET 4.0的Web窗体
Ryan S

2
我刚刚测试了一下,发现Dns.GetHostName() 没有给出完全合格的名称。
2013年

5
请注意,System.Enviornment.MachineName仅会为您提供NetBIOS名称,因此,如果主机名长度超过15个字符,则在需要全名时会遇到问题。我不能为别人说话。
RandomInsano 2014年

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代码创建者

常见问题


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名称和计算机名称可能不同。他在索要计算机名!
marsh-wiggle 2015年

4

我将<p>Web项目的方括号.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;
    }
   }
}

1

2个其他有用的方法:System.Environment.GetEnvironmentVariable(“ ComputerName”)

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


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.