Просто чтобы быть хорошим гражданином вики и стремиться к завершению, есть и другие способы. Я не предлагал этого раньше, потому что это полностью излишне для чего-то, что будет запускаться только в составе набора тестов, и вы прямо в заголовке сказали, что хотите чего-то легкого.
Но если вам нужно увидеть события, как они происходят, в коде доставки, читайте дальше. Верьте или нет, на данный момент для этой вещи есть три различных API-интерфейса Windows.
NotifyChangeEventLog ()
Исходный API для такого рода вещей называется NotifyChangeEventLog () , и он поддерживается начиная с Windows 2000. По сути, вы используете API журнала событий WIN32 , чтобы открыть журнал событий. Затем вы вызываете этот API с дескриптором, который вы дали другому API, и с дескриптором события. Windows сообщит о вашем событии, когда появятся новые записи в журнале событий.
Я никогда не использовал этот API сам, потому что больше всего меня интересовал удаленный доступ к журналу событий, и этот API явно не поддерживает удаленные журналы. Однако остальная часть набора API, к которой относится , делает , позволяя вам последовательно читать удаленные журналы, если у вас есть необходимые разрешения.
Инструментарий управления Windows
Второй способ - использовать API инструментария управления Windows , и он поддерживает как локальные, так и удаленные журналы. Это API, основанный на COM / DCOM, который существует уже несколько лет в Windows, и .NET Framework имеет хорошую реализацию его в пространстве имен System.Management . По сути, вы создаете EventQuery , который ищет появление новых объектов WMI типа (то есть в системе типов WMI) Win32_NTLogEvent . Их появление будет указывать на новые записи в журнале событий, и они будут представлены в реальном времени. Атрибуты этих объектов содержат все детали записи журнала. В журнале MSDN есть статья , в которой рассказывается об игре с этим материалом в Visual Studio.
Опять же, это было бы полным перерасходом для тестового приложения, для этого потребовалось бы гораздо больше кода, чем в существующем решении. Но много лет назад я написал подсистему для приложения управления сетью, которая использовала DCOM-версию этого API для сбора журналов событий со всех серверов в сети, чтобы мы могли предупреждать о конкретных из них. Это было довольно гладко и чертовски близко к реальному времени. Если вы реализуете это в C ++ с DCOM, будьте готовы иметь дело с Multithreaded Apartments и множеством хитрой логики, чтобы определить, когда / когда ваше соединение с удаленным сервером увеличивается или уменьшается.
Журнал событий Windows Vista
Windows Vista (и Server 2008) имеют совершенно новый набор API, относящийся к регистрации и отслеживанию событий. новый журнал событий документирован здесь . Похоже, есть API под названием EvtSubscribe, который позволяет подписываться на события . Я не использовал этот API, поэтому не могу комментировать его плюсы и минусы.