我有一个Windows服务侦听来自队列的消息但是没有从队列中读取消息。我创建了一个事件日志来检查服务启动和关闭期间的日志但是没有写入日志。我不想调试服务,因为这是一个痛苦的过程。有办法解决这个问题。服务需要读取消息并写入数据库。
答案 0 :(得分:3)
这听起来好像您的Windows服务运行的帐户没有足够的权限写入相关的事件日志。
为非管理员帐户设置事件日志权限可能有点黑色,因为您需要使用SDDL等配置自定义安全描述符。但是,有一个非常方便的MS知识库文章,介绍如何以编程方式执行此操作:
How to setup event log security programmatically using the .Net Framework
我现在一直使用它,它很简单:
int mask = EventLogSecurity.CustomSD_ALL_ACCESS;
string logName = "Application";
string domain = "MyMachineOrDomainName";
string account = "UserAccount";
EventLogSecurity.AddUserToEventLogCustomSD(logName, domain, account, mask);
答案 1 :(得分:0)
根据我的经验,写入事件日志的最常见问题是用户没有足够的权限来写入事件日志。您可以检查运行Windows服务的身份,并验证它是否有权写入您创建的事件日志?
并且,您是否可以检查事件日志以查看在尝试写入时是否记录了任何错误?
答案 2 :(得分:0)
如果要使用日志记录而不是调试,请不要使用事件日志。使用普通的旧文本日志。