.net 源和日志属性必须匹配

pkbketx9  于 2023-10-21  发布在  .NET
关注(0)|答案(4)|浏览(144)

当我尝试启动服务时,我得到以下错误:
无法启动服务。System.ArgumentException:源“Bar source”未在日志“Bar 2”中注册。“Source和Log属性必须匹配,或者您可以将Log设置为空字符串,它将自动与Source属性匹配。位于System.Diagnostics.EventLogInternal. VerifyAndroidSource(String sourceName,String currentMachineName)位于System.Diagnostics.EventLogInternal.WriteEntry(String message,EventLogEntryType type,Int 32 eventID,Int 16 category,Byte[] rawData)位于System.Diagnostics.EventLog.WriteEntry(String message)位于Bar.Service1.writeToLog(String msg)位于C:\Program Files(x86)\Bar -用于APPS\Service1.vb:行292位于Bar.Service1.OnStart(String[] args)位于C:\Program Files(x86)\Bar -用于APPS\Service1.vb:行37位于System.ServiceProcess.ServiceBase. ServiceOperatedMainCallback(Object state)
有人知道是什么原因导致了这个问题吗?我在代码中没有提到Bar2,程序文件中的文件夹名为“Bar 2”,但我将其更改为“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
cfh9epnr

cfh9epnr1#

Log属性存储事件日志的名称,在控制面板>管理工具>事件查看器小程序中可见。大多数应用程序都记录到Windows日志>应用程序日志,这是未分配Log属性时的默认设置。但是你可以为你自己的应用创建一个自定义日志,在“应用和服务日志”条目下可见。
当您首次使用EventSource创建日志时,此信息将记录在注册表中。Log属性必须在将来匹配,如果不是,则会出现此异常。因此,您所知道的是,该日志实际上已经存在,但您曾经使用不同的日志名称“Bar2”创建了它。可能是觉得这不是一个很好的名字,并改变了日志属性。嘭
将Log属性设置为空字符串不是解决方法。它将继续记录到原始日志名称,使用注册表找回其名称。您可以使用Regedit.exe修复不需要的注册,导航到HKLM\SYSTEM\CurrentControlSet\Services\EventLog。如果您删除条目,那么您也应该删除相应的.evtx文件,File值为您提供其路径名。

pgpifvop

pgpifvop2#

将日志保留为空字符串解决了错误:

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
sd2nnvve

sd2nnvve3#

在我的例子中,我将一个名为“P5-RUN Analytics”的日志分配给名为“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

工作时间:

Public 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的注册表中清除了旧的服务/日志名称。

mwecs4sa

mwecs4sa4#

如果你想删除一个事件日志,以及所有注册到它的源,你可以使用powershell命令:Remove-EventLog
可以使用New-EventLog创建事件日志
我更喜欢这一点,而不是编辑注册表。

相关问题