【发布时间】:2010-10-02 07:44:41
【问题描述】:
在 .NET Windows 服务 (C#) 中,如何获取计算机名称?
这是一种可靠的方法,还是应该将其包装在 try/catch 中?
【问题讨论】:
-
10 个月后询问了提到的重复项......并且它们都相互引用,从而导致相互链接的无限循环。这是 SO 中的蜘蛛侠模因。
标签: c# .net windows-services
在 .NET Windows 服务 (C#) 中,如何获取计算机名称?
这是一种可靠的方法,还是应该将其包装在 try/catch 中?
【问题讨论】:
标签: c# .net windows-services
查看Environment class。里面有很多好东西,包括MachineName:
string CurrentMachineName = Environment.MachineName;
根据文档,这可能会生成 InvalidOperationException,因此您需要注意这种可能性。不过,风险可能不保证将其包装在 try/catch 中。
【讨论】:
我认为首先您必须确定“计算机名称”的含义。
正如其他人所说,并且可能“传统上”在 Windows 上,您将使用 Environment.MachineName 属性来获取 计算机名称,这实际上是计算机的 NetBIOS 名称。另一种选择是机器的(完全限定的)DNS 名称。但是请注意,一台机器实际上可能有多个适配器/IP 地址/其他任何东西,因此有多个 DNS 名称。
考虑到对Environment.MachineName 的潜在InvalidOperationException 的处理,我建议考虑一下如果遇到它,你实际上会做什么。如果有什么你可以做的,你可以而且当然应该抓住它。
例如,在我的某些代码中,我需要获取计算机名称(顺便说一句,也在服务中),但我仅将其用于诊断目的。如果Environment.MachineName 失败,我只需在诊断输出中使用一些"(unknown)" 字符串(并且还会记录一次错误)。
如果结果对您的进一步处理至关重要,您可能也应该捕获异常,将事件写入 Windows 事件日志并“死亡”。
【讨论】: