首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >源属性和日志属性必须匹配

源属性和日志属性必须匹配
EN

Stack Overflow用户
提问于 2018-07-04 13:50:53
回答 3查看 7K关注 0票数 12

当我尝试启动服务时,我会得到以下错误:

服务无法启动。System.ArgumentException:源“Bar源”未在日志“Bar2”中注册。(它在日志“Bar source”中注册。)“必须匹配Source和Log属性,否则可以将Log设置为空字符串,并且它将自动匹配到Source属性。在System.Diagnostics.EventLogInternal.VerifyAndCreateSource(String sourceName,String currentMachineName) at System.Diagnostics.EventLogInternal.WriteEntry(String message,EventLogEntryType类型,Int32 eventID,Int16类别,( System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object rawData)在C:\Program (x86)\Bar中的System.Diagnostics.EventLog.WriteEntry(String message) at Bar.Service1.writeToLog(String[])--用于应用程序\Service1.vb:在Bar.Service1.OnStart(String[] args)中的第292行C:\Program (x86)\Bar -用于应用程序\Service1.vb:第37行(处于rawData状态)

有人知道是什么导致了这个问题吗?我在代码中没有提到Bar2,程序文件中的文件夹名为"Bar2“,但我将其更改为"Bar”。

请指点!

这是WriteToLog函数:

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-08 12:46:17

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

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2018-07-08 13:39:50

log属性存储事件日志的名称,在“控制面板”>“管理工具”>“事件查看器小程序”中可见。大多数应用程序日志都是Windows日志>应用程序日志,这是不分配log属性时的默认设置。但是您可以为自己的应用程序创建一个自定义日志,在“应用程序和服务日志”条目下可见。

此信息在您首次使用CreateEventSource创建日志时记录在注册表中。Log属性在将来必须是匹配的,如果不是,则会得到此异常。因此,您所知道的是,日志实际上已经存在,但是您曾经用不同的日志名称"Bar2“创建它。可能会认为这不是一个很好的名称,并更改了Log属性。卡博姆。

将Log属性设置为空字符串不是解决办法。它将继续登录到原始日志名,使用注册表查找其名称。您可以使用HKLM\SYSTEM\CurrentControlSet\Services\EventLog.修复不需要的注册,导航到Regedit.exe如果删除该条目,则还应删除相应的.evtx文件,文件值将给出其路径名。

票数 15
EN

Stack Overflow用户

发布于 2020-12-17 05:42:20

在我的例子中,我将一个名为“P5-RunAnalyticslog”的日志分配给名为“FSSHP5-RunAnalytics”的服务。

不工作:公共子集New()

代码语言:javascript
运行
复制
    ' 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 

工作:

公众分组新()

代码语言:javascript
运行
复制
    ' 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的注册表中清除了旧的服务/日志名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51175319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档