繁体   English   中英

为什么我的事件日志源一直在注册表中的“应用程序”下而不是<log> ?</log>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM