gpt4 book ai didi

windows-services - 服务安装失败,因为事件源已存在

转载 作者:行者123 更新时间:2023-12-02 01:07:46 24 4
gpt4 key购买 nike

我正在尝试配置基于 Topshelf 的 Windows 服务以使用 Topshelf.Log4Net 和 log4net 记录到自定义事件日志。如果我在命令行模式下运行应用程序,这会很好地工作。当我尝试使用 BillsTestService.exe install 安装服务时,我得到:

INFO  Topshelf v3.1.107.0, .NET Framework v4.0.30319.18052
DEBUG Attempting to install 'BillsTestService'
Running a transacted installation.
...
Service BillsTestService has been successfully installed.
Creating EventLog source BillsTestService in log Application...

An exception occurred during the Install phase.
System.ArgumentException: Source BillsTestService already exists on the local computer.
...
at System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData)

我试过在安装之前在 LINQPad 中运行 EventLog.DeleteEventSource("BillsTestService");;成功,但后续服务安装仍然失败。

我的 log4net appender 配置是:

<appender name="ErrorEventLogAppender" type="log4net.Appender.EventLogAppender" >
<threshold value="ERROR" />
<logName value="MyCompanyServices" />
<applicationName value="BillsTestService" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level %logger - %message%newline" />
</layout>
</appender>

我做错了什么?

目的是让多个服务将错误记录到同一个日志名称(具有不同的应用程序名称);日志将由操作创建。

最佳答案

部分问题是 Topshelf 在您安装时自动创建以服务命名的事件日志源。由于 log4net appender applicationName 也用作事件日志源,因此不能是实际的应用程序/服务名称。源在本地计算机上必须是唯一的。我在 log4net 配置中的名称中添加了一个“Source”后缀。

另一部分是服务没有创建日志的权限。它可以创建新源,但不能创建新日志。一种方法是在代码中执行此操作(我使用了 LINQPad):

EventLog.CreateEventSource("FOODEBUG", "MyCoSvc");

EventLog mylog = new EventLog("MyCoSvc");
mylog.Source = "FOODEBUG";

mylog.WriteEntry("This is a test.");

EventLog.DeleteEventSource("FOODEBUG");

如果您真的必须写入日志才能创建它,我并不肯定;在这上面花了两天多之后,我宁愿安全。

另请注意,日志名称限制为 8 个字符;你可以写得更长,但系统只认为前 8 个字符是重要的。

没有必要像 Chris Patterson 建议的那样移动 log4net 初始化。简单地包括

configurator.DependsOnEventLog();
configurator.UseLog4Net("MyService.exe.config");

HostFactory.Run 委托(delegate)中就足够了。 (我正在使用 Topshelf.Log4Net。)

最后,我有理由相信整个 Windows 事件记录系统是不稳定的。事件查看器的刷新并非在所有情况下都有效,有一次我的应用程序日志条目消失了,我相信我在重新启动后看到了不同的结果。

关于windows-services - 服务安装失败,因为事件源已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20670539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com