当我尝试启动服务时,出现以下错误:
服务无法启动。 System.ArgumentException:源“ Bar源”未在日志“ Bar2”中注册。 (它是 在日志'Bar source'中注册。)“ Source和Log属性 必须匹配,否则您可以将Log设置为空字符串,它将 自动匹配到Source属性。 在System.Diagnostics.EventLogInternal.VerifyAndCreateSource(String sourceName,字符串currentMachineName) 在System.Diagnostics.EventLogInternal.WriteEntry(字符串消息,EventLogEntryType类型,Int32 eventID,Int16类别,字节[] 原始数据) 在System.Diagnostics.EventLog.WriteEntry(字符串消息) 在C:\ Program Files(x86)\ Bar中Bar.Service1.writeToLog(String msg)处-在APPS \ Service1.vb上使用:第292行 在C:\ Program Files(x86)\ Bar中Bar.Service1.OnStart(String [] args)处-在APPS \ Service1.vb:第37行上使用 在System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object 状态)
有人知道导致问题的原因吗?我在代码中没有提到Bar2
,程序文件中的文件夹称为“ Bar2”,但我将其更改为“ Bar”。
请告知!
这是WriteToLog
函数:
Private Sub writeToLog(ByVal msg As String)
Dim evtLog As New EventLog
If Not Diagnostics.EventLog.SourceExists("Bar") Then
Diagnostics.EventLog.CreateEventSource("Bar", "Log of Bar")
End If
evtLog.Source = "Bar"
evtLog.Log = "Log of Bar"
evtLog.WriteEntry(msg)
End Sub
答案 0 :(得分:7)
“日志”属性存储事件日志的名称,在“控制面板”>“管理工具”>“事件查看器”小程序中可见。大多数应用程序登录到Windows日志>应用程序日志,这是未分配Log属性时的默认设置。但是您可以为自己的应用创建自定义日志,在“应用和服务日志”条目下可见。
第一次使用CreateEventSource创建日志时,此信息记录在注册表中。 Log属性将来必须匹配,如果不匹配,则会出现此异常。因此,您所知道的是该日志实际上已经存在,但是您曾经使用不同的日志名称“ Bar2”创建了该日志。可能认为这不是一个很好的名字,然后更改Log属性。卡布姆。
将Log属性设置为空字符串不是一种解决方法。它将继续使用注册表找到其名称,再次登录到原始日志名称。您可以使用Regedit.exe修复不需要的注册,导航到HKLM \ SYSTEM \ CurrentControlSet \ Services \ EventLog。如果删除该条目,则还应该删除相应的.evtx文件,“文件”值为您提供其路径名。
答案 1 :(得分:3)
将日志保留为空字符串可解决错误:
Private Sub writeToLog(ByVal msg As String)
Dim evtLog As New EventLog
If Not Diagnostics.EventLog.SourceExists("Bar") Then
Diagnostics.EventLog.CreateEventSource("Bar", "")
End If
evtLog.Source = "Bar"
evtLog.Log = ""
evtLog.WriteEntry(msg)
End Sub
答案 2 :(得分:1)
就我而言,我正在将名为“ P5-RUN Analytics LOG”的日志分配给名为“ FSSH P5-RUN Analytics”的服务。
不起作用: Public Sub New()
' This call is required by the designer.
InitializeComponent()
Try
If Not System.Diagnostics.EventLog.SourceExists("FSSH P5-RUN Analytics") Then
System.Diagnostics.EventLog.CreateEventSource("FSSH P5-RUN Analytics", "P5-RUN Analytics Log")
End If
EventLog1.Source = "FSSH P5-RUN Analytics"
EventLog1.Log = "P5-RUN Analytics Log"
Catch ex As Exception
End Try
End Sub
工作:
公共Sub New()
' This call is required by the designer.
InitializeComponent()
Try
If Not System.Diagnostics.EventLog.SourceExists("P5-RUN Analytics") Then
System.Diagnostics.EventLog.CreateEventSource("P5-RUN Analytics", "P5-RUN Analytics Log")
End If
EventLog1.Source = "P5-RUN Analytics"
EventLog1.Log = "P5-RUN Analytics Log"
Catch ex As Exception
End Try
End Sub
一旦我使服务的前六个字符与日志匹配,就可以正确安装它并像超级按钮一样工作。如果前几个字符不同步(或重复吗?),这会引起其他文章有关服务冲突的钟声,但我不记得该文章的发布位置。
最后,一旦我对服务和日志名称进行了更改,便在重新安装服务之前,从HKLM \ SYSTEM \ CurrentControlSet \ Service \ EventLog的注册表中清除了旧的服务/日志名称。