写入事件日志时出错,阻止Windows服务启动?

时间:2010-11-23 06:31:09

标签: c# windows-services event-log

我使用以下代码在 Windows服务应用中创建自定义事件日志

public ServiceConstructor()
{
  InitializeComponent();
  if (!EventLog.SourceExists("WinService"))
  {
    EventLog.CreateEventSource("WinService", "WinServiceLog");
    eventLog1.Source = "WinService";
    eventLog1.Log = "WinServiceLog";
  }
}
protected override void OnStart(string[] args)
{
 eventLog1.WriteEntry("Started");
}

安装service.msi后,当我启动服务时,它启动然后停止。然后我在EventViewer Windows日志部分中发现以下错误:

  

无法启动服务。   System.ArgumentException:在写入之前未设置Source属性   到事件日志。

at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) at System.Diagnostics.EventLog.WriteEntry(String message) at WinService.Service.OnStart(String[] args) at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

2 个答案:

答案 0 :(得分:7)

如果源已存在,则看起来您没有初始化eventLog1.Source。

建议您将初始化代码移动到OnStart并移出构造函数。

将这两行移出if语句:

eventLog1.Source = "WinService";
eventLog1.Log = "WinServiceLog";

答案 1 :(得分:5)

尝试以下方法:

EventLog.CreateEventSource("WinService", "Application");
eventLog1.Log = "Application";

还在OnStart中添加以下内容:

eventLog1.Log="Application"
eventLog1.Source = "WinService";