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

Bla*_*man 11 .net c# windows-services

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

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

Mic*_*ren 22

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

string CurrentMachineName = Environment.MachineName;
Run Code Online (Sandbox Code Playgroud)

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

  • 我们已经看到了零星的现场故障,因此如果您的代码路径很重要,您应该抓住IOE. (2认同)

Chr*_*n.K 12

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

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

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

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

如果结果对于您的进一步处理至关重要,您也应该捕获异常,将事件写入Windows事件日志并"死".