c# - 安装源和日志后重新启动事件日志
问题描述
我正在使用 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,但在键下是两个事件源 MyEventSource和MyEventLog。
解决方案
推荐阅读
- hiveql - GROUP BY 中的 MAX() 用法与非数字列
- c# - 如何使 WPF 应用程序或窗口中的音频静音?
- java - 将相机 Intent 传递给 Android 输入流
- mysql - “from flaskext.mysql import MySQL”导致服务器显示 502 bad gateway
- java - map.size() 是否始终与 map.entrySet().size() 相同
- angularjs - 如何在 angularjs 应用程序中使用 ngrx
- r - rmarkdown - 导出目录
- java - Mod_Cluster LifecycleListeners Spring Boot
- oracle - 在 WebLogic 10.3.6.0 上部署错误消息
- php - 如何使用 PHP ldap_modify 更新 Active Directory 中的照片