事件日志 - EntryWrittenEventArgs返回事件ID

时间:2015-08-18 20:44:57

标签: c#

我正在开发一个简单的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);
        }
    }

0 个答案:

没有答案