Windows服务正在运行但事件日志无法正常工作

我有一个Windows服务监听来自队列的消息,但不从队列中读取消息。我创build了一个事件日志来检查服务启动和closures期间的日志,但日志不写入。 我不想debugging服务,因为这是一个痛苦的过程。是否有办法解决这个问题。消息需要被服务读取并写入数据库。

这听起来好像您的Windows服务正在运行的帐户没有足够的权限写入有问题的事件日志。

设置非管理员帐户的事件日志权限可能是一个黑色的艺术,因为你需要使用SDDL等配置自定义安全描述符。但是有一个非常方便的MS知识库文章如何以编程方式做到这一点:

如何使用.Net Framework以编程方式设置事件日志安全性

我现在一直都在使用它,就像这样简单:

int mask = EventLogSecurity.CustomSD_ALL_ACCESS; string logName = "Application"; string domain = "MyMachineOrDomainName"; string account = "UserAccount"; EventLogSecurity.AddUserToEventLogCustomSD(logName, domain, account, mask); 

根据我的经验,写入事件日志中最常见的问题是用户没有足够的权限写入事件日志。 您可以检查Windows服务正在运行的身份,并验证它是否有权写入您创建的事件日志?

而且,你可以检查事件日志,看看是否有任何错误正在被记录时尝试写入?

如果您想使用日志记录而不是调试,请不要使用事件日志。 使用普通的旧文本日志。