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

在.NET Windows服务(C#)中,如何获取计算机名称?

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

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

string CurrentMachineName = Environment.MachineName; 

根据文档,这可能会生成InvalidOperationException,因此您需要了解这种可能性。 但是,风险可能并不保证将其包装在try / catch中。

我想首先你必须通过“计算机名称”来决定你的意思。

正如其他人所说,并且可能“传统上”在Windows上,您将使用Environment.MachineName属性来获取计算机的名称 ,这实际上是计算机的 NetBIOS名称。 另一种选择是机器的(完全限定的)DNS名称。 但请注意,单个机器实际上可以有多个适配器/ IP地址/任何内容,因此可以有多个DNS名称。

考虑到对Environment.MachineName的潜在InvalidOperationException的处理,我建议考虑一下如果遇到它会实际做什么。 如果你能做些什么,你当然可以抓住它。

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

如果结果对于进一步处理至关重要,您也应该捕获exception,将事件写入Windows事件日志并“死”。