[英]Why does my Event Log source keep getting put under “Application” in the registry instead of <log>?
我正在尝试创建一个 windows 服务,我需要它能够写入事件日志。 我在我的服务项目中添加了一个EventLog
组件,并将Log
属性设置为ccs_wscln_log
并将Source
属性设置为ccs_wscln
(与服务同名)。
我还为这个项目创建和安装程序。 我的问题是,每当我安装该服务时,它应该在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application
下创建ccs_wscln
注册表项 HKEY_LOCAL_MACHINE\SYSTEM HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\ccs_wscln_log
。
问题在于,当我尝试启动服务时,我收到一条错误消息
"源'ccs_wscln'没有注册在日志'ccs_wscln_log'中。(它注册在日志'Application'中)。源和Log属性必须匹配,或者你可以将Log设置为空字符串,它会自动被与源属性匹配”。
我发现如果我删除 Application 文件夹下的 ccs_wscln 注册表项,当我启动服务时,它将运行并在 EventLog 下生成 ccs_wscln_log 条目。 所以我的问题是,当我安装应用程序时,为什么它会在应用程序下自动为我创建一个条目,我该如何防止它这样做?
我在 SO 上发现了另一篇文章,说如果我之前在应用程序下安装过我需要重新启动计算机,所以我尝试了,但是当我重新加载解决方案时,我什至无法调出设计器,因为它抱怨注册表条目丢失了,它仍然会安装在应用程序下。
我创建了一个使用 C# 从头开始创建 Windows 服务的教程。 我解决了写入特定于应用程序的日志的问题。 有关详细信息,请参阅此处的第 9 步。
我认为,您需要在 ServiceInstaller class 中进行以下操作。
this.Installers.Clear();
上面的代码需要在您添加一系列安装程序之前。
那是因为默认添加了EventLogInstaller。 调用 clear 将删除它。 或者,您可以遍历安装程序集合 select 特定类型 (EventLogInstaller) 并为其分配所需的 LogName 和 EventSource 名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.