如何在C#中找到计算机的完全限定主机名?

如何在C#中找到计算机的完全限定主机名?,c#,environment-variables,C#,Environment Variables,我想要像abc.hyd.mycompany.com这样的东西。我的要求是解析这个名称并初始化适当的服务 using System.Net; Dns.GetHostName() // doesn't return fully qualified name it just gives "abc" 您可以像这样获取整个DNS字符串: System.Net.Dns.GetHostEntry("").HostName 在我工作的地方,我们没有成熟的DNS名称,但它确实给了我一个三级的假域名,而不仅

我想要像abc.hyd.mycompany.com这样的东西。我的要求是解析这个名称并初始化适当的服务

using System.Net;

Dns.GetHostName() // doesn't return fully qualified name it just gives "abc" 

您可以像这样获取整个DNS字符串:

System.Net.Dns.GetHostEntry("").HostName
在我工作的地方,我们没有成熟的DNS名称,但它确实给了我一个三级的假域名,而不仅仅是主机名


编辑2011/03/17:下面的mark建议的合并更改。

如果上述操作不起作用,您也可以尝试从环境中检索它:

var dnsName = new StringBuilder();
dnsName.Append(Environment.GetEnvironmentVariable("COMPUTERNAME")).Append(".");
dnsName.Append(Environment.GetEnvironmentVariable("USERDNSDOMAIN"));

我使用了非常类似的方法:

var serverName = System.Environment.MachineName; //host name sans domain
var fqhn = System.Net.Dns.GetHostEntry(serverName).HostName; //fully qualified hostname

这可能不起作用-USERDNSDOMAIN可能与计算机所属的域不同。最好还是将空字符串“”传递给GetHostEntry。这会产生同样的结果,但感觉更好。@mark:你说得对,确实如此,而且处理指令少了一条。我不知道我怎么会错过。更新两年前的答案感觉有点奇怪,但是……这在XP和Win7上的效果一样吗?在最近的编辑之前给出的示例代码在Win7上给出了限定的主机名,但在XP上只给出了限定的名称。想要在这两个方面都能工作的代码。谢谢。@辛辛那提乔:奇怪的是,旧版本和新版本在我的WinXP SP3工作机器上工作完全相同,它位于密歇根州的内部网络上。我已经更新了答案,仍然显示旧版本,以防出现像您遇到的问题。事实上,我是说旧方法在XP上无法按预期工作。对修改后的方法进行了快速尝试,但在XP上似乎也不起作用。这两项工作都可以在Win7上找到。因此,可能需要另一种解决方案来获得XP上的限定名称。