首页 > 解决方案 > 安装源和日志后重新启动事件日志

问题描述

我正在使用 Wix 并安装一个事件日志,例如:

<util:EventSource Log='MyLogName' Name='MyLogSource' EventMessageFile='%systemroot%\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll' />

我有一项服务在安装后运行并尝试登录到 MyLogSource。除非我重新启动系统,否则它不会开始记录。

但是,如果我在 C# 代码中创建日志,我可以立即登录。C# 代码可以在我的服务 OnStart()

EventLog.CreateEventSource("MyLogSouce", "MyLogName");

我的服务类中有一个名为 eventLog 的 Systems.Diagnostics.EventLog 实例,其初始化如下:

eventLog .Source = "MyLogSource"; // instance variable created in InitializeComponent()

澄清一下,如果我使用 Wix 创建事件源(因此不使用 C# 代码创建它),那么当服务启动并开始记录时,日志中没有任何内容。我必须重新启动,然后一切正常。

但是,如果我注释掉 Wix 部分以创建事件源并在 C# 代码中执行它,那么当我开始记录时,数据会进入日志并且不需要重新启动。我的服务并不真正依赖于任何其他服务。

如果我使用 Wix 安装,是否有某种技巧可以让它立即工作?有没有办法<ServiceControl />为我的组件使用一个条目,以便我可以重新启动或停止并启动服务,以便日志记录工作而无需重新启动?

更新:2021 年 10 月 28 日

我确实去挖掘了 EventLog 源代码。它不会重新启动任何服务。但是,它在创建事件源时会创建两个事件源。从 WiX 创建事件源时,它只创建一个事件源。

因此,在 Wix 中,如果我正在创建 MyLogSource 和 MyLogName,它只会为这些项目创建注册表项。但是,在 C# 源代码中,当使用相同的参数调用 EventLog.CreateEventSource API 时,它确实会创建这些项目,但是,它还创建另一个名为 MyEventLog 的事件源。

因此,在注册表树中,有事件日志 MyEventLog,但在键下是两个事件源 MyEventSourceMyEventLog。

标签: c#wixwindows-installer

解决方案


推荐阅读