Любой свет для TEventLogger? - PullRequest
       7

Любой свет для TEventLogger?

5 голосов
/ 20 августа 2009

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 20 августа 2009

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

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

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

Если вы не пишете приложение-службу, вам нужно напрямую вызвать Win32 API RegisterEventSource() и ReportEvent().

7 голосов
/ 20 августа 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 Настройки \ fgaillard \ Мои документы \ RAD Studio \ Projects \ Project1.exe) не может быть найден. Локальный компьютер может не иметь необходимых информация реестра или файлы DLL сообщений для отображения сообщений от удаленный компьютер. Вы можете использовать флаг / AUXSOURCE = для получить это описание; см. Помощь и Поддержка для деталей. Следующая информация является частью мероприятия: * Бла Бла Бла *.

...