Visual C++ を使用してイベント ログにエントリを書き込む
この記事では、Microsoft .NET Frameworkを使用して、オペレーティング システムのイベント ログに独自のエントリを追加する方法について説明します。
元の製品バージョン: Visual C++
元の KB 番号: 815661
要件
Visual Studio .NET
イベント ログにエントリを書き込む
イベント ログは、アプリケーションが重要なソフトウェアおよびハードウェア イベントを記録するための標準的な一元化された方法を提供します。 Windows には、ログを表示するための標準ユーザー インターフェイス (イベント ビューアー) が用意されています。 共通言語のランタイム EventLog コンポーネントを使用すると、ローカル コンピューターとリモート コンピューターの両方で既存のイベント ログに簡単に接続し、これらのログにエントリを書き込むことができます。 既存のログからエントリを読み取り、独自のカスタム イベント ログを作成することもできます。 最も簡単な形式では、イベント ログに書き込むには、サンプル アプリケーションを作成するためのいくつかの手順が必要です。
これを行うには、次の手順に従います。
Visual Studio .NET を起動します。
新しい Visual C++ マネージド C++ アプリケーション プロジェクトを作成します。
コードに次の行を追加して 、system.dll への参照を追加します。
#using <system.dll>
コードの
using
後半でSystem
これらの名前空間からの宣言を修飾する必要がないように、 およびSystem::Diagnostics
名前空間で ディレクティブを使用します。 他の宣言の前に、次のステートメントを使用できます。using namespace System; using namespace System::Diagnostics;
イベント ログに書き込むには、いくつかの情報が必要です。
- メッセージ
- 書き込む場所のログの名前 (まだ存在しない場合は作成されます)
- イベントのソースを表す文字列
特定のソースを登録できるのは、1 つのイベント ログのみです。 複数のログにメッセージを書き込む場合は、複数のソースを定義する必要があります。
String^ sSource; String^ sLog; String^ sEvent; sSource = gcnew String("dotNET Sample App1"); sLog = gcnew String("Application1"); sEvent = gcnew String("Sample Event1");
クラスの 2 つの静的メソッドを
EventLog
使用して、ソースが存在するかどうかをチェックし、ソースが存在しない場合は、特定のイベント ログに関連付けられているこのソースを作成します。 指定したログ名が存在しない場合、最初のエントリをログに書き込むと、名前が自動的に作成されます。 既定では、メソッドにログ名CreateEventSource
を指定しない場合、ログ ファイルの名前は アプリケーション ログになります。if(!EventLog::SourceExists(sSource)) EventLog::CreateEventSource(sSource,sLog);
イベント ログにメッセージを書き込むには、静的メソッド
EventLog.WriteEntry
を使用できます。 このメソッドには、いくつかの異なるオーバーロードされたバージョンがあります。 次のサンプル コードは、最も単純なメソッド (ソース文字列とメッセージを受け取る) と、より複雑なメソッドの 1 つ (イベント ID とイベントの種類の指定をサポート) を示しています。EventLog::WriteEntry(sSource,sEvent); EventLog::WriteEntry(sSource, sEvent, EventLogEntryType::Warning, 235);
アプリケーションを保存します。 アプリケーションを実行し、イベント ビューアーにアプリケーションのサインインをチェックして、新しいイベントを表示します。
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;
}
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示