Есть ли свет для TEventLogger?

Я хочу узнать о регистрации событий из приложения Delphi 5 в журнале Windows и из другого сообщения здесь Я вижу, что могу использовать для этого класс TEventLogger.

Однако я не могу найти никакой документации по синтаксису процедуры TEventLogger.LogMessage, поэтому я не знаю, что означают все параметры, как их использовать и даже какие возможные значения доступны.

Я попытался осмотреться, и все, что я нашел, - это страница Embarcadero, в которой говорится, что функция существует, но ничего не говорится о ее синтаксисе, и MSDN не помогает, так как я могу найти только версию BizTalk, которая мне не подходит.

Есть ли у кого-нибудь справочная страница или информация по этому поводу, которая могла бы пролить свет на то, что я могу с этим сделать?


person Tom A    schedule 19.08.2009    source источник


Ответы (2)


TEventLogger - это внутренний вспомогательный класс для TService.

Вы регистрируете сообщение с помощью функции TService.LogMessage(), а не путем прямого вызова TEventLogger. Параметры LogMessage() напрямую совпадают с параметрами Win32 API _ 6_.

Подробности смотрите в документации Win32 API.

Если вы не пишете служебное приложение, вам необходимо вызвать Win32 API _ 7_ и _ 8_ вместо этого работает напрямую.

person Remy Lebeau    schedule 20.08.2009
comment
Это будет весело. В конечном итоге мне понадобятся оба метода, поскольку приложение может работать как служба (в которую мы хотим ее превратить) или как автономный исполняемый файл (которым он сейчас является). По крайней мере, я знаю, как определить, в каком режиме он работает, и могу соответствующим образом переключиться. Спасибо всем за помощь. - person Tom A; 20.08.2009

Простой пример записи приложения в журнал событий:

procedure WriteToLog(Msg:string; EventId: Word = 0);
var
  h: THandle;
begin
  h := RegisterEventSource(nil, PChar(Application.ExeName));
  if h > 0 then
  try
    ReportEvent(h, 0, 0, EventId, nil, 1, 0, @Msg, nil);
  finally
    DeregisterEventSource(h);
  end;
end;

procedure TForm7.Button1Click(Sender: TObject);
begin
  WriteToLog('* Blah Blah Blah *');
end;

Но будьте осторожны, чтобы не зарегистрировать EventID в системе выдаст вот такое запутанное Описание:

Описание для события с кодом (0) в источнике (C: \ Documents and Settings \ fgaillard \ My Documents \ RAD Studio \ Projects \ Project1.exe) не найдено. На локальном компьютере может не быть необходимой информации реестра или файлов DLL сообщений для отображения сообщений с удаленного компьютера. Вы можете использовать флаг / AUXSOURCE = для получения этого описания; подробности см. в разделе «Справка и поддержка». Следующая информация является частью события: * Blah Blah Blah *.

person Francesca    schedule 20.08.2009