可以试一下EventLog.EntryWritten 事件
若要获取事件通知,必须将 EnableRaisingEvents 设置为 true。只有在本地计算机上写入项时,才能接收事件通知。无法接收在远程计算机上写入项时的通知。 创建 EntryWritten 委托时,标识将处理事件的方法。若要使该事件与事件处理程序相关联,请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序,直到移除该委托。有关用委托处理事件的更多信息,请参见 使用事件。 仅当上一个写入事件至少在六秒种之前发生时,系统才响应 WriteEntry。这意味着即使发生了多个事件日志更改,在六秒钟的间隔内您也只会接收到一个 EntryWritten 事件通知。如果在对 WriteEntry 的两次调用之间插入足够长的休眠间隔(大约 10 秒),则错过事件的可能性就会降低。然而,如果写入事件的发生频率更高,则在下次间隔到来之前您可能不会收到事件通知。通常,错过的事件通知并未丢失,而是被延迟了。
C# code
using System;
using System.Diagnostics;
using System.Threading;class MySample{ // This member is used to wait for events.
static AutoResetEvent signal; public static void Main(){
EventLog myNewLog = new EventLog();
myNewLog.Log = "MyCustomLog"; myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);
myNewLog.EnableRaisingEvents = true;
signal = new AutoResetEvent(false);
signal.WaitOne(); } public static void MyOnEntryWritten(object source, EntryWrittenEventArgs e){
signal.Set();
}
}MSDN上面查到的,现在想实时监控系统事件日志,每产生一条事件日志就显示一条信息出来。
若要获取事件通知,必须将 EnableRaisingEvents 设置为 true。只有在本地计算机上写入项时,才能接收事件通知。无法接收在远程计算机上写入项时的通知。 创建 EntryWritten 委托时,标识将处理事件的方法。若要使该事件与事件处理程序相关联,请将该委托的一个实例添加到事件中。每当事件出现时就调用事件处理程序,直到移除该委托。有关用委托处理事件的更多信息,请参见 使用事件。 仅当上一个写入事件至少在六秒种之前发生时,系统才响应 WriteEntry。这意味着即使发生了多个事件日志更改,在六秒钟的间隔内您也只会接收到一个 EntryWritten 事件通知。如果在对 WriteEntry 的两次调用之间插入足够长的休眠间隔(大约 10 秒),则错过事件的可能性就会降低。然而,如果写入事件的发生频率更高,则在下次间隔到来之前您可能不会收到事件通知。通常,错过的事件通知并未丢失,而是被延迟了。
C# code
using System;
using System.Diagnostics;
using System.Threading;class MySample{ // This member is used to wait for events.
static AutoResetEvent signal; public static void Main(){
EventLog myNewLog = new EventLog();
myNewLog.Log = "MyCustomLog"; myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);
myNewLog.EnableRaisingEvents = true;
signal = new AutoResetEvent(false);
signal.WaitOne(); } public static void MyOnEntryWritten(object source, EntryWrittenEventArgs e){
signal.Set();
}
}MSDN上面查到的,现在想实时监控系统事件日志,每产生一条事件日志就显示一条信息出来。
'Win32_NTLogEvent' and TargetInstance.LogFile = 'xxxxx'
只有使用底层的东西了阿
ConnectionOptions options = new ConnectionOptions();
options.Username = username;
options.Password = password;
options.Impersonation = ImpersonationLevel.Impersonate;ManagementEventWatcher watcher = new ManagementEventWatcher();
WqlEventQuery query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_NTLogEvent\" and TargetInstance.Logfile = \"Security\"");
watcher.Query = query;
watcher.Scope = new ManagementScope("\\\\远程电脑IP地址\\root\\cimv2", options);
ManagementBaseObject ea = watcher.WaitForNextEvent();string EventCode = "EventCode:" + ((ManagementBaseObject)ea["TargetInstance"])["EventCode"];