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

352

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


2
重复的问题 [链接](https://dev59.com/O3RB5IYBdhLWcg3w77sn) - Malachi
1
@Malachi,那个问题是关于Windows服务的。 - Sam
2
@Sam,Windows服务只是在后台运行的Windows应用程序,因此实际上它们是相同的东西。 - Malachi
1
@Malachi,是的,我知道你的意思。然而,在这个问题的答案中提到的针对ASP.NET和Winforms特定方法的参考可能不适用于那个问题。 - Sam
1
@Malachi,我想你误解了我的ASP.NET的意思。我不是指一个ASP.NET应用程序获取其客户机名称,尽管这样做(获取DNS名称)可能很容易,因为应用程序将获取客户端的IP地址。我是指ASP.NET应用程序获取它们所在主机计算机的名称。请参见此处最受欢迎的答案作为示例。 - Sam
显示剩余2条评论
13个回答

493

3
@tvanfosson: 有什么区别吗?我的意思是说,我应该在什么情况下使用哪一个?这会有任何安全方面的影响吗? - P.K
28
如果我需要从控制台或WinForms应用程序中使用,我会使用第一个选项;如果我需要在Web应用程序中使用,则会选择第二个选项;如果我需要获取FQDN,则会选择第三个选项。请参阅相关文档以了解所需的权限信息。 - tvanfosson
1
@tvanfosson 这三个都给我服务器名称,而不是访问页面的客户机器。这就是它的工作方式吗?还是我做错了什么。我想获取客户端机器,而不是服务器。我正在使用带有asp.NET 4.0的Web Forms。 - Ryan S
3
我刚刚测试了一下,发现 Dns.GetHostName() 没有返回完全限定的名称。 - Sam
7
请注意,System.Environment.MachineName 只会给你 NetBIOS 名称,所以如果主机名超过 15 个字符,如果需要完整名称,则会遇到问题。我不能代表其他人发表意见。 - RandomInsano
显示剩余5条评论

95

System.Environment.MachineName

如果你使用的是WinForms,你可以使用System.Windows.Forms.SystemInformation.ComputerName,它会返回与System.Environment.MachineName完全相同的值。


62
System.Environment.MachineName

在F#中,如此简单易懂 open system ... let system_name = System.Environment.MachineName - octopusgrabbus

42
以下是获取计算机名或机器名的一些方法: 方法1:-
string MachineName1 = Environment.MachineName;

方法二:-

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

方法三:-

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

方法4:-

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

想要了解更多,请访问我的博客


当主机名超过15个字符时,此方法将返回不同的名称! - marsh-wiggle
1
博客链接没有提供有关此答案中提到的API的更多信息。因此,我认为不应在此处添加它。 - MartinZ

24
string name = System.Environment.MachineName;

17

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

FAQs


16

4
我将我的 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;
    }
   }
}

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

3

使用这一行代码来让它更简单

Environment.MachineName;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接