我正在开发一个简单的C#Windows服务,它通过“EntryWrittenEventHandler”处理程序监听EventLog并监视登录注销事件,然后将它们写入数据库。
该服务按预期工作了几天,然后突然间我没有看到有关登录和注销事件的任何内容。我看到EntryWrittenEventHandler处理程序在每个新的Security EventLog写入时被触发......但在EntryWrittenEventArgs类中...我看到每个条目都被报告为“事件ID 0”并且此消息:
“
信息 “无法找到”源“中”事件ID“0的描述。本地计算机可能没有必要的注册表信息或消息DLL文件来显示消息,或者您可能没有权限访问它们。以下信息是活动的一部分:“ 串 信息 “无法找到”源“中”事件ID“0的描述。本地计算机可能没有必要的注册表信息或消息DLL文件来显示消息,或者您可能没有权限访问它们。以下信息是活动的一部分:“ 串 +所有者 {} System.Diagnostics.EventLogInternal System.Diagnostics.EventLogInternal ReplacementStrings {string [0]} string [] 资源 “”字符串 + TimeGenerated {12/31/1969 7:00:00 PM} System.DateTime的 + TimeWritten {12/31/1969 7:00:00 PM} System.DateTime的 用户名 空字符串“
不知道最近发生了什么。在有问题的服务器上打开EventLog ...我可以按预期看到所有条目。日期也是从1969年开始......这也很奇怪。
这是我到目前为止的代码:
public Audit()
{
CanHandleSessionChangeEvent = true;
//Start the EventLog Watcher
startEventLogWatch();
}
private void startEventLogWatch()
{
EventLog eLog = new EventLog("Security");
eLog.EntryWritten += new EntryWrittenEventHandler(EventLog_OnEntryWritten);
eLog.EnableRaisingEvents = true;
}
private void EventLog_OnEntryWritten(object source, EntryWrittenEventArgs e)
{
try
{
if (e.Entry.InstanceId.ToString() == "4624")
{
EventAudit eventAuditEntry = new EventAudit();
eventAuditEntry = LogonEvent(e);
if (eventAuditEntry.ADUserName != null)
{
WriteDBEntry(eventAuditEntry);
}
}
else if (e.Entry.InstanceId.ToString() == "4647")
{
EventAudit eventAuditEntry = new EventAudit();
eventAuditEntry = LogoffEvent(e);
if (eventAuditEntry.ADUserName != null)
{
WriteDBEntry(eventAuditEntry);
}
}
}
catch (Exception ex)
{
eventLog1.WriteEntry("A general error has occured. The error message is as follows: " + ex.Message.ToString(), EventLogEntryType.Error, 2001);
}
}