2009-08-19 9 views
5

Delphi 5アプリケーションのイベントをWindowsのログや別の投稿に記録する方法については、hereを参照してください。TEventLoggerクラスを使用してこれを行うことができます。TEventLoggerのライトはありますか?

しかし、TEventLogger.LogMessageプロシージャの構文に関するドキュメントは見つかりません。したがって、すべてのパラメータの意味、使用方法、または使用可能な値がわかりません。

私は見てみましたが、エンバカデロの機能は存在していますが、構文には何も表示されず、MSDNは役に立ちませんでした。 。

ヘルプページやこれに関する情報があれば、私はそれをどうすればいいのか分かりますか?

答えて

8

TEventLoggerTServiceの内部ヘルパークラスです。

TEventLoggerを直接呼び出すのではなく、TService.LogMessage()機能を使用してメッセージを記録します。 LogMessage()のパラメータは、Win32 API ReportEvent()のパラメータと直接一致します。

詳細については、Win32 APIのドキュメントを参照してください。

サービスアプリケーションを作成していない場合は、代わりに直接Win32 API RegisterEventSource()ReportEvent()関数を呼び出す必要があります。

+0

これは楽しいものです。私は最終的に、アプリケーションをサービスとして実行できるようにする(これを作成したい)か、スタンドアロンの実行可能ファイルとして実行することができるようになります(現在のところ)。少なくとも私はそれがどのモードで実行されているかを検出する方法を知っており、適切に切り替えることができます。みんな助けてくれてありがとう。 –

7

イベントログへのアプリケーションの書き込みの簡単な例:

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; 

しかし、混乱した説明のこの種を与えるないregistering the EventID with the systemことを注意してください:

イベントIDの説明(0) (C:¥Documents and Settings¥fgaillard¥My Documents¥RAD Studio¥Projects¥Project1.exe) が見つかりません。ローカルコンピュータは、 リモートコンピュータからのメッセージを表示するために、必要な レジストリ情報またはメッセージDLLファイルを持っていない可能性があります。/AUXSOURCE =フラグを使用して にこの説明を取得できます。詳細については、ヘルプとサポートを参照してください。下記の 情報は、イベントの一部です:* Blah Blah Blah *。

関連する問題