EventLogQuery 忽略 TimeCreated 条件

EventLogQuery ignoring TimeCreated criteria

我正在使用以下辅助函数:

public List<EventRecord> GetEvents(DateTime afterTime)
{
    var formattedDateTime = $"{afterTime:yyyy-MM-dd}T{afterTime:HH:mm:ss}.000000000Z";

    var query     = $"*[(System/Provider/@Name='.Net Runtime') and (System/EventID=1000) and (System/TimeCreated/@SystemTime >= '{formattedDateTime}')]";

    var queryResult = new EventLogQuery("Application", PathType.LogName, query);
    var reader      = new EventLogReader(queryResult);
    
    var events = new List<EventRecord>();
    while (true)
    {
        var rec = reader.ReadEvent();

        if (rec == null)
        {
            break;
        }

        events.Add(rec);
    }

    return events;
}

除了查询似乎完全忽略了 TimeCreated 之外,这段代码几乎可以正常工作。它返回具有给定 ProviderName 和 EventId 的所有事件。我已经尝试了各种不同的方法来让它工作,但无论如何,TimeCreated 都被忽略了。

有人看到我做错了什么吗?

编辑 1

甚至将查询行替换为:

var query     = $"*[System[TimeCreated[@SystemTime >= '{formattedDateTime}']]]";

无效。 Returns 所有事件,无论它们是何时创建的。

编辑 2

所以我尝试使用 'custom view' 生成器为我生成一个 XML 查询,但我发现更令人困惑的是:

所以目前我机器上显示的时间是:2:42pm。 在 24 小时制中,它应该是 14:42pm.

当我使用自定义视图和 select 创建查询时: 来自:'Events On' 03/18/2021 2:42pm ,它创建以下内容:

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[Provider[@Name='.NET Runtime'] and (EventID=1000) and TimeCreated[@SystemTime&gt;='2021-03-18T20:42:13.000Z']]] </Select>
  </Query>
</QueryList>

天哪,绿色地球为什么把2:42pm转换成20:42?

显然你需要将你的时间转换为 UniversalTime 才能工作。

这是一个工作示例:

public List<EventRecord> GetEvents(DateTime afterTime)
{
    var formattedDateTime = afterTime.ToUniversalTime().ToString("o");

    var query     = $"*[System[Provider[@Name='.NET Runtime'] and (EventID=1000) and TimeCreated[@SystemTime>='{formattedDateTime}']]]";

    var queryResult = new EventLogQuery("Application", PathType.LogName, query);
    var reader      = new EventLogReader(queryResult);
    
    var events = new List<EventRecord>();
    while (true)
    {
        var rec = reader.ReadEvent();

        if (rec == null)
        {
            break;
        }

        events.Add(rec);
    }

    return events;
}