如何在 .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 »</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 中获取计算机名称的主要内容,如果未能解决你的问题,请参考以下文章