订阅事件日志中的非系统(自定义)事件

时间:2013-08-09 08:11:48

标签: c# windows event-log

我想在Windows事件查看器中将新日志条目添加到特定事件日志文件时引发事件。我正在尝试做类似于这里提到的事情。 http://msdn.microsoft.com/en-us/library/bb671202.aspx

这是我的代码:

static void Main()
    {
        EventLogWatcher watcher = null;
        try
        {                
            EventLogQuery eventQuery = new EventLogQuery("C:\\Windows\\System32\\winevt\\Logs\\Admin.evtx", PathType.FilePath);                             

            EventLogReader logReader = new EventLogReader(eventQuery);
            DisplayEventAndLogInformation(logReader);// this successfully opens the log and shows all logged events. 
            watcher = new EventLogWatcher(eventQuery);
            watcher.EventRecordWritten +=                       
                    new EventHandler<EventRecordWrittenEventArgs>(SomeEvent);
            watcher.Enabled = true; // here i get an unhandled exception which is as below:                         
        } //exception handling omitted here for conciseness

public static void SomeEvent(Object obj, EventRecordWrittenEventArgs arg){}
public static void DisplayEventAndLogInformation(EventLogReader logReader){}

我无法使用PathType.LogName,因为这不是标准的系统日志,并且在

下没有相应的注册表项
  

HKLM /系统/ CurrentControlSet /服务/事件日志

。当我使用像“System”或“Application”这样的Logname时,此代码可以正常工作,但是当我使用相应的PathType.FilePath时,它会失败。我希望它与PathType.FilePath一起使用,并在每次将特定查询(此处未提及)输入日志时触发事件。关于为什么这段代码不起作用的任何输入都会很棒! 当DisplayEventAndLogInformation方法完美地工作时,为什么我会收到“频道路径inavalid”错误?

异常消息:

  

System.Diagnostics.Eventing.Reader.EventLogException:指定的   渠道路径        是无效的          在System.Diagnostics.Eventing.Reader.EventLogException.Throw(Int32   错误代码       )          在System.Diagnostics.Eventing.Reader.NativeWrapper.EvtSubscribe(EventLogHand)       le session,SafeWaitHandle signalEvent,String path,String query,EventLogHandl       e书签,IntPtr上下文,IntPtr回调,Int32标志)          在System.Diagnostics.Eventing.Reader.EventLogWatcher.StartSubscribing()          在System.Diagnostics.Eventing.Reader.EventLogWatcher.set_Enabled(布尔值   VAL       UE)          在C:\ Users \ username \ documents \ visual studio中的eventlogreader.Program.Main()        2010 \ Projects \ eventlogreader \ eventlogreader \ Program.cs:第40行          在System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args       )          在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySec       urity,String [] args)          在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()          在System.Threading.ThreadHelper.ThreadStart_Context(对象状态)          在System.Threading.ExecutionContext.RunInternal(ExecutionContext   executionCo       ntext,ContextCallback回调,对象状态,布尔保留SyncCtx)          在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,C       ontextCallback回调,对象状态,布尔保留SyncCtx)          在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,C       ontextCallback回调,对象状态)          在System.Threading.ThreadHelper.ThreadStart()

0 个答案:

没有答案