何时/何处应在Windows服务中创建事件日志源?

时间:2011-05-09 15:34:57

标签: c# c#-4.0 windows-services

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

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

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

我很困惑我应该检查和创建事件日志源。我应该在安装程序服务的Windows服务或构造函数方法的构造方法中创建吗?

当我用Google搜索时,我发现了两种方式。那么,你能告诉我最好的做法吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

  • 将错误消息记录到文件中 系统某处说明了记录 是为了禁用该服务
  • 抛出异常,因此服务没有 启动(这应该导致Windows 写自己的事件日志条目)
  • 完全禁用日志记录等

如果您在服务中检查(并尝试创建事件日志源,如果它不存在),那么您将获得能够容忍用户或其他程序删除事件日志的服务的额外次要好处来源您的服务依靠。