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