【问题标题】:Get the computer name in a Windows service?在 Windows 服务中获取计算机名称?
【发布时间】:2010-10-02 07:44:41
【问题描述】:

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

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

【问题讨论】:

  • 10 个月后询问了提到的重复项......并且它们都相互引用,从而导致相互链接的无限循环。这是 SO 中的蜘蛛侠模因。

标签: c# .net windows-services


【解决方案1】:

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

string CurrentMachineName = Environment.MachineName;

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

【讨论】:

  • 我们已经看到零星的现场故障,因此如果您的代码路径很关键,您应该捕获 IOE。
【解决方案2】:

我认为首先您必须确定“计算机名称”的含义。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 2013-04-25
    • 2018-08-28
    • 2012-11-03
    • 1970-01-01
    • 2010-12-18
    • 2011-12-14
    相关资源
    最近更新 更多