我有一个针对 .Net 4.8 的 VB.net 程序,其中包含一个可执行文件和两个不同的后台服务。 一个服务基于命令行参数运行多个实例,另一个服务作为清理任务的管理服务运行一次。 两者都内置了一些基本日志记录,这些日志记录会进入标准 Windows 应用程序日志,但无论我做什么,两者之一都不会记录。 两者都使用相同的命令进行日志记录,例如:
My.Application.Log.WriteEntry($"MyService for location {MyLocationID} ({MyLocationName}) is now active.")
两者都使用基于 Microsoft 文档的相同 app.config 文件。 事实上,我将工作服务 app.config 复制到非工作服务中,只更改了应用程序名称部分,但这并没有修复它。 两者都有
AutoLog = False
作为 OnStart()
之后的第一行,但是如果我评论该行,非日志服务的启动和停止确实会显示在事件日志中。 因此,默认的自动日志消息会通过,但我的手动日志记录却不会。 两者都是通过 sc.exe 以相同的方式同时安装的。
由于一项服务正确记录,我不确定为什么另一项服务不能正确记录,因为它使用相同的 app.config 文件。 我可能会错过什么?
所以显然我找到了答案,但我真的不喜欢它。 显然,VB.Net Service 需要引用 Systems.Windows.Forms 才能写入默认应用程序事件日志。 我仔细研究了两项服务之间的每一个差异,这是唯一的差异。 我从工作服务中删除了引用,因为为什么服务需要对表单的引用,因为不需要它并且事件日志记录停止工作。 我将其重新添加了进去,并将其添加到了之前无法工作的项目中,现在它们都可以工作了。 为什么我的第一个服务一开始就有这个参考,我不知道,因为第二个服务默认没有,但我可能永远不会弄清楚。
我确信这是有一些背景逻辑原因的,但这对我来说没有意义。 希望这对将来的人有所帮助。