我正在处理一个需要经常检查某些事件的Windows事件日志的项目。我想知道:
Is there a way to create a subscription of the Windows Event Log for certain event?
那么,当事件发生时(即事件id = 00001),我可以尽快在代码中获得通知?我正在使用c#。如果无法做到这一点,那么我将不得不继续搜索效率不高的事件日志。
由于
答案 0 :(得分:13)
当您使用C#时,我认为您应该使用Windows API订阅某些Windows事件。您可以使用EventLogWatcher或EventLog类来完成。您可以在MSDN上找到使用EventLog创建Windows事件日志订阅的示例。
如果您更喜欢EventLogWatcher,请参阅其有限的documentation。这是我的榜样:
exit()
答案 1 :(得分:0)
这是一个简化的示例,它使用在 Windows 事件查看器的过滤器视图上的 XML 选项卡中生成的查询。它加载查询返回的初始记录,然后监视任何未来的项目。
var query = $"*[System[(EventID=1942) and TimeCreated[timediff(@SystemTime) <= 604800000]]]";
var decoded = System.Web.HttpUtility.HtmlDecode(query);
var eventLogQuery = new EventLogQuery("Application", PathType.LogName, decoded);
var watcher = new EventLogWatcher(eventLogQuery, null, true);
var count = 0;
watcher.EventRecordWritten += (object sender, EventRecordWrittenEventArgs e) =>
{
count += 1;
Console.WriteLine($"Found {count} items for query");
};
watcher.Enabled = true;
for (var i = 0; i < 5; i++)
{
System.Threading.Thread.Sleep(10000);
}