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

C# 订阅事件日志中的非系统(自定义)事件,c#,windows,event-log,C#,Windows,Event Log,每当在windows事件查看器中将新日志项添加到特定事件日志文件时,我希望引发一个事件。我正在尝试做一些类似于这里提到的事情 这是我的代码: static void Main() { EventLogWatcher watcher = null; try { EventLogQuery eventQuery = new EventLogQuery("C:\\Windows\\Syste

每当在windows事件查看器中将新日志项添加到特定事件日志文件时,我希望引发一个事件。我正在尝试做一些类似于这里提到的事情

这是我的代码:

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){}
static void Main()
{
EventLogWatcher-watcher=null;
尝试
{                
EventLogQuery eventQuery=new EventLogQuery(“C:\\Windows\\System32\\winevt\\Logs\\Admin.evtx”,PathType.FilePath);
EventLogReader logReader=新的EventLogReader(eventQuery);
DisplayEventAndLogInformation(logReader);//这将成功打开日志并显示所有记录的事件。
观察者=新的EventLogWatcher(eventQuery);
watcher.eventRecordWrited+=
新的EventHandler(SomeEvent);
watcher.Enabled=true;//这里我得到一个未处理的异常,如下所示:
}//为了简洁起见,这里省略了异常处理
公共静态void SomeEvent(对象obj,eventRecordWrittenEventTargets arg){}
公共静态void显示事件和登录信息(事件日志读取器日志读取器){}
我无法使用
PathType.LogName
,因为这不是标准的系统日志,并且它的下一个注册表项也不对应

HKLM/System/CurrentControlSet/Services/EventLog

。当我使用诸如“系统”或“应用程序”之类的日志名时,此代码可以正常工作,但当我使用它们相应的
PathType.FilePath
时,它会失败。我希望它能够与
PathType.FilePath一起工作,并在特定查询(此处未提及)时触发事件输入到日志中。任何关于此代码不工作原因的输入都将非常有用!
当
DisplayEventAndLogInformation
方法工作正常时,为什么会出现“通道路径无效”错误

异常消息:

System.Diagnostics.Eventing.Reader.EventLogException:指定的 通道途径 无效 在System.Diagnostics.Eventing.Reader.EventLogException.Throw(Int32 错误代码 ) 在System.Diagnostics.Eventing.Reader.NativeWrapper.EVTSSubscribe(EventLogHand)中 le会话、SafeWaitHandle信号事件、字符串路径、字符串查询、EventLogHandl e书签、IntPtr上下文、IntPtr回调、Int32标志) 在System.Diagnostics.Eventing.Reader.EventLogWatcher.StartSubscribing()中 在System.Diagnostics.Eventing.Reader.EventLogWatcher.set_Enabled(布尔值)中 瓦尔 (ue) 在C:\Users\username\documents\visualstudio中的eventlogreader.Program.Main()处 2010\Projects\eventlogreader\eventlogreader\Program.cs:第40行 在System.AppDomain.\u nexecutestAssembly(RuntimeAssembly程序集,字符串[]args ) 在System.AppDomain.ExecuteAssembly(String assemblyFile,证据assemblySec urity,字符串[]args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()上 位于System.Threading.ThreadHelper.ThreadStart\u上下文(对象状态) 位于System.Threading.ExecutionContext.RunInternal(ExecutionContext 行刑公司 ntext、ContextCallback回调、对象状态、布尔值保存(同步CTX) 在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,C ontextCallback回调,对象状态,布尔值(SyncCTX) 在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,C ontextCallback,对象状态) 位于System.Threading.ThreadHelper.ThreadStart()处


你不是真的在问问题。这更像是在陈述你的发现。如果这样做有效,为什么不使用他们的名字呢?如果不是系统日志,那么它是由Windows事件日志处理的吗?如果不是,我怀疑它是否会引发你订阅的任何事件。一个FileWatcher可能比其他人更有用。谢谢,我已经修改了这篇文章以使我的问题更清楚了。我无法使用该名称,它没有检测到我感兴趣的日志,因为它不在默认注册表空间中。它不是windows“系统”日志本身,它来自第三方windows服务/应用程序。我已经有了Filewatcher实现,但它效率不高/不可靠,而且在向日志文件中添加特定值/eventID时,它不会特别触发事件。类似问题和答案: