在Windows服务中获取计算机名称?

13

在一个.NET的Windows服务(使用C#),我该如何获取计算机名称?

这是一种可靠的方法吗?还是应该将它包装在try/catch中?


1
可能是如何在.NET中获取计算机名称的重复问题。 - Michael Freidgeim
1
提到的重复问题是在10个月后被问到的... 他们两者都互相引用,导致无限循环链接。这就是在SO上的蜘蛛侠梗。 - J. Rockwood
2个回答

24

看看Environment类。里面有很多好东西,包括MachineName属性:

string CurrentMachineName = Environment.MachineName;

根据文档,这可能会生成一个 InvalidOperationException,所以您需要意识到这种可能性。不过,风险可能不足以将其包装在 try/catch 中。


2
我们已经见过现场失败,所以如果您的代码路径关键,您应该捕获IOE。 - JBRWilkinson

12

我认为首先你需要确定你所说的“计算机名称”的含义。

正如其他人所说,并且在Windows上可能是“传统的”,你可以使用Environment.MachineName属性来获取计算机的名称,实际上是机器的NetBIOS名称。另一个选择是机器的(完全合格的)DNS名称。但请注意,一台机器实际上可能有多个适配器/IP地址/等等,因此还可能有多个DNS名称。

考虑到Environment.MachineName的潜在InvalidOperationException的处理,我建议考虑一下如果遇到这种情况你会做什么。如果有什么你能做的,你当然应该捕获它。

例如,在我的一些代码中,我需要获取计算机名称(顺带一提,也在服务中),但我只将其用于诊断目的。如果Environment.MachineName失败了,我只在诊断输出中使用一些"(unknown)"字符串(并记录一次错误)。

如果结果对你的后续处理非常重要,你可能还应该捕获异常、将事件写入Windows事件日志并“停止运行”。


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