2009-01-19 76 views
10

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

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

+0

[我如何在.NET中获取计算机名称](http://stackoverflow.com/questions/1768198/how-do-i-get-the-computer-name-in-net) – 2017-01-29 11:20:29

回答

20

看看Environment class。那里有很多的好东西在里面,包括MachineName

string CurrentMachineName = Environment.MachineName; 

根据该文档,这可能会产生一个InvalidOperationException,所以你需要知道的这种可能性。不过,这种风险可能并不能保证将其包装在试用/抓住中。

+2

我们已经看到零星的现场故障,所以如果你的代码路径很重要,你应该抓住IOE。 – JBRWilkinson 2009-11-09 10:57:01

12

我认为首先你必须决定你的意思是“计算机名称”。

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

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

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

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

+0

Upvote的详细答案和建议 – AFract 2015-09-10 13:17:59