Visual C++ を使用してイベント ログにエントリを書き込む

この記事では、Microsoft .NET Frameworkを使用して、オペレーティング システムのイベント ログに独自のエントリを追加する方法について説明します。

元の製品バージョン: Visual C++
元の KB 番号: 815661

要件

Visual Studio .NET

イベント ログにエントリを書き込む

イベント ログは、アプリケーションが重要なソフトウェアおよびハードウェア イベントを記録するための標準的な一元化された方法を提供します。 Windows には、ログを表示するための標準ユーザー インターフェイス (イベント ビューアー) が用意されています。 共通言語のランタイム EventLog コンポーネントを使用すると、ローカル コンピューターとリモート コンピューターの両方で既存のイベント ログに簡単に接続し、これらのログにエントリを書き込むことができます。 既存のログからエントリを読み取り、独自のカスタム イベント ログを作成することもできます。 最も簡単な形式では、イベント ログに書き込むには、サンプル アプリケーションを作成するためのいくつかの手順が必要です。

これを行うには、次の手順に従います。

  1. Visual Studio .NET を起動します。

  2. 新しい Visual C++ マネージド C++ アプリケーション プロジェクトを作成します。

  3. コードに次の行を追加して 、system.dll への参照を追加します。

    #using <system.dll>
    
  4. コードの using 後半で System これらの名前空間からの宣言を修飾する必要がないように、 および System::Diagnostics 名前空間で ディレクティブを使用します。 他の宣言の前に、次のステートメントを使用できます。

    using namespace System;
    using namespace System::Diagnostics;
    
  5. イベント ログに書き込むには、いくつかの情報が必要です。

    • メッセージ
    • 書き込む場所のログの名前 (まだ存在しない場合は作成されます)
    • イベントのソースを表す文字列

    特定のソースを登録できるのは、1 つのイベント ログのみです。 複数のログにメッセージを書き込む場合は、複数のソースを定義する必要があります。

    String^ sSource;
    String^ sLog;
    String^ sEvent;
    
    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");
    
  6. クラスの 2 つの静的メソッドをEventLog使用して、ソースが存在するかどうかをチェックし、ソースが存在しない場合は、特定のイベント ログに関連付けられているこのソースを作成します。 指定したログ名が存在しない場合、最初のエントリをログに書き込むと、名前が自動的に作成されます。 既定では、メソッドにログ名 CreateEventSource を指定しない場合、ログ ファイルの名前は アプリケーション ログになります。

    if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
    
  7. イベント ログにメッセージを書き込むには、静的メソッド EventLog.WriteEntryを使用できます。 このメソッドには、いくつかの異なるオーバーロードされたバージョンがあります。 次のサンプル コードは、最も単純なメソッド (ソース文字列とメッセージを受け取る) と、より複雑なメソッドの 1 つ (イベント ID とイベントの種類の指定をサポート) を示しています。

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);
    
  8. アプリケーションを保存します。 アプリケーションを実行し、イベント ビューアーにアプリケーションのサインインをチェックして、新しいイベントを表示します。

Visual C++ .NET での完全なコード 一覧

#include <tchar.h>
#using <system.dll>
#using <mscorlib.dll>

using namespace System;
using namespace System::Diagnostics;

int _tmain()
{
    String^ sSource;
    String^ sLog;
    String^ sEvent;

    sSource = gcnew String("dotNET Sample App1");
    sLog = gcnew String("Application1");
    sEvent = gcnew String("Sample Event1");

     if(!EventLog::SourceExists(sSource))
       EventLog::CreateEventSource(sSource,sLog);

    EventLog::WriteEntry(sSource,sEvent);
    EventLog::WriteEntry(sSource, sEvent,
    EventLogEntryType::Warning, 234);
    return 0;
}