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

无论何时将新的日志条目添加到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因为这不是一个标准的系统日志,它没有相应的registry项

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

。 当我使用像“系统”或“应用程序”的PathType.FilePath时,此代码工作正常,但是当我使用其相应的PathType.FilePath时失败。 我希望它能和PathType.FilePath一起工作,并且只要特定的查询(这里没有提到)被input到日志中就触发事件。 关于为什么这个代码不工作的任何投入将是伟大的! 为什么当DisplayEventAndLogInformation方法完美地正常工作时,我得到“通道pathinavalid”错误?

exception消息:

System.Diagnostics.Eventing.Reader.EventLogException:在System.Diagnostics.Eventing.Reader.EventLogException.Throw(Int32 errorCode)在System.Diagnostics.Eventing.Reader.NativeWrapper.EvtSubscribe(EventLogHand文档,SafeWaitHandle在System.Diagnostics.Eventing.Revent.EventLogWatcher.StartSubscribe()在System.Diagnostics.Eventing.Reader.EventLogWatcher.set_Enabled(布尔值val())的System.DataEvent,stringpath,string查询,EventLogHandl e书签,IntPtr上下文,IntPtrcallback,Int32标志) ue)在eventlogreader.Program.Main()在C:\用户\用户名\文档\视觉演播室2010 \ Projects \ eventlogreader \ eventlogreader \ Program.cs:行40在System.AppDomain._nExecuteAssembly(RuntimeAssembly大会,string[]参数)System.ThreadingHelper.ThreadStart_Context(Object state)在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySec urity,String [] args)at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() System.Threading.ExecutionContext.Run(ExecutionContext executionContext,C ontextCallbackcallback,对象状态,布尔preserveSyncCtx)在System.Threading.ExecutionContext.RunInternal(ExecutionContext executionCo ntext,ContextCallbackcallback,对象状态,布尔preserveSyncCtx) .Run(ExecutionContext executionContext,C ontextCallbackcallback,对象状态)在System.Threading.ThreadHelper.ThreadStart()

Solutions Collecting From Web of "在事件日志中订阅非系统(自定义)事件"