我应该在何时/何地在 Windows 服务中创建 EventLogSource

本文关键字:创建 EventLogSource 服务 何地 何时 我应该 Windows | 更新日期: 2023-09-27 17:55:54

我正在使用C#和.Net框架4.0开发Windows服务。

为了使 Windows 服务将条目写入事件日志,我需要检查并创建事件日志源(如果不存在)。

if (EventLog.SourceExists("MySource") == false)
            EventLog.CreateEventSource("MySource", "MyLog"); 

我对应该在哪里检查和创建事件日志源感到困惑。 我应该在 Windows 服务的构造函数方法还是安装程序服务的构造函数方法中创建?

当我用谷歌搜索时,我找到了两种方式。 那么,你能为我建议最佳实践吗? 谢谢。

我应该在何时/何地在 Windows 服务中创建 EventLogSource

我认为最好

在安装程序中添加事件日志源,但我也会检查以确保服务启动时事件日志源存在。此外,您可能希望使用安装程序事件之一,而不是在构造函数中添加事件日志源。我以前没有这样做过,但我认为AfterInstall事件看起来像是添加事件日志源的好地方(有关详细信息,请参阅此问题的答案:安装时自动启动 Windows 服务)。

使用安装程序服务添加事件日志源的原因是(如@MusiGenesis指出的)您更有可能拥有在安装应用程序时创建事件日志源所需的安全访问权限。当服务运行时,可以将其设置为无权创建事件日志源的帐户。

在服务本身中,我会检查以确保事件日志源也存在。如果它不存在,您可以尝试重新创建它,如果尝试失败,那么您可以采取最适合您需求的任何操作。例如:

  • 将错误消息记录到文件中系统某处说明日志记录用于禁用服务
  • 引发异常,以便服务不会启动(这应该导致 Windows写入自己的事件日志条目)
  • 完全禁用日志记录等。

如果在服务中检查(并尝试创建事件日志源,如果不存在),则可以获得额外的次要好处,即服务能够容忍用户或其他程序删除服务所依赖的事件日志源。