我使用以下代码在 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)
答案 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";