EventSourceCreationData クラス
アセンブリ: System (system.dll 内)


ローカライズされたエントリをイベント ログに書き込むために新しいソースを構成するには、EventSourceCreationData クラスを使用します。イベント ログから読み込む場合、このクラスを使用する必要はありません。
このクラスは、新しいイベント ソースおよび関連するイベント ログの構成設定を定義します。関連するイベント ログは、ローカル コンピュータまたはリモート コンピュータに配置できます。ローカル コンピュータに新規または既存のイベント ログの新しいソースを作成するには、EventSourceCreationData の LogName プロパティおよび Source プロパティを設定して、EventLog.CreateEventSource(EventSourceCreationData) メソッドを呼び出します。このメソッドは、Source プロパティで指定したイベント ソースを作成して、LogName で指定されたイベント ログのイベント ソースとして登録します。この動作は、EventLogInstaller クラスを使用してイベント ログのイベント ソースを登録することに似ています。
イベントをイベント ログに書き込むには、WriteEvent メソッドおよび WriteEntry メソッドを使用します。イベントを書き込むには、イベント ソースを指定することが必要です。イベント ソースは、そのソースを持つ最初のエントリを書き込む前に作成および構成しておく必要があります。
アプリケーションのインストール時に新しいイベント ソースを作成します。これにより、オペレーティング システムが、登録されたイベント ソースとその構成の一覧を更新するための時間的余裕が生まれます。イベント ソースの一覧がオペレーティング システムにより更新されていないとき、新しいソースでイベントを書き込もうとすると、書き込み操作が失敗します。新しいソースは、EventLogInstaller または CreateEventSource メソッドを使用して構成できます。新しいイベント ソースを作成するには、コンピュータの管理者権限が必要です。
既存のイベント ログまたは新しいイベント ログのイベント ソースを作成できます。新規イベント ログに対して新しいソースを作成すると、システムは、そのログのソースを登録しますが、ログは最初のエントリが書き込まれるまで作成されません。
各ソースは、同時に 1 つのイベント ログだけに書き込むことができます。ただし、アプリケーションは複数のソースを使用して、複数のイベント ログに書き込むことができます。たとえば、アプリケーションには、異なるイベント ログまたは異なるリソース ファイル用に構成された複数のソースが必要になる場合があります。
既存のソースの構成情報を変更するには、一度ソースを削除してから、新しい構成で作成し直す必要があります。他のアプリケーションまたはコンポーネントが既存のソースを使用している場合、既存のソースを削除するのではなく、更新された構成で新しいソースを作成します。
イベント カテゴリおよびメッセージ文字列のローカライズされたリソースにイベント ソースを登録できます。アプリケーションは、実際の文字列を指定するのではなく、リソース識別子を使用してイベント ログ エントリを書き込むことができます。イベント ビューアでは、リソース識別子を使用して、ローカライズされたリソース ファイルから、現在の言語設定に基づく対応する文字列を検索して表示させることができます。イベント カテゴリ、メッセージ、およびパラメータ挿入文字列に個別のファイルを登録することも、この 3 種類の文字列に同じリソース ファイルを登録することもできます。ローカライズされたエントリをイベント ログに書き込むようにソースを構成するには、CategoryCount、CategoryResourceFile、MessageResourceFile、および ParameterResourceFile の各プロパティを使用します。アプリケーションが文字列値を直接イベント ログに書き込む場合、これらのプロパティを設定する必要はありません。
ソースは、ローカライズされたエントリを書き込むか、または直接の文字列を書き込むように構成されている必要があります。WriteEntry メソッドは、指定された文字列をイベント ログに直接書き込みます。ローカライズされたメッセージ リソース ファイルは使用しません。ローカライズされたメッセージ リソース ファイルを使用してイベントを書き込むには、WriteEvent メソッドを使用します。
アプリケーションがリソース識別子と文字列値の両方を使用してエントリを書き込む場合、2 つの異なるソースを登録する必要があります。たとえば、複数のリソース ファイルを持つ 1 つのソースを構成してから、WriteEvent メソッドでこのソースを使用し、リソース識別子によってエントリをイベント ログに書き込みます。次に、リソース ファイルを使わずに作成した別のソースを WriteEntry メソッドで使用し、そのソースを使って文字列を直接イベント ログに書き込みます。
Windows 98 プラットフォームメモ : イベント ログは、Windows 98 または Windows Millennium Edition (Me) ではサポートされていません。

コマンド ライン引数からイベント ソースの構成プロパティを設定するコード例を次に示します。入力引数は、イベント ソース名、イベント ログ名、コンピュータ名、およびイベント メッセージ リソース ファイルを指定します。このコード例は、ソースが既存のイベント ソースと競合していないことを確認してから、指定されたイベント ログの新しいイベント ソースを作成します。
Imports System Imports System.Globalization Imports System.Diagnostics Namespace EventLogSamples Class CreateSourceSample Public Shared Sub Main(ByVal args() As String) Dim mySourceData As EventSourceCreationData = new EventSourceCreationData("", "") Dim registerSource As Boolean = True ' Process input parameters. If args.Length > 0 ' Require at least the source name. mySourceData.Source = args(0) If args.Length > 1 mySourceData.LogName = args(1) End If If args.Length > 2 mySourceData.MachineName = args(2) End If If args.Length > 3 AndAlso args(3).Length > 0 mySourceData.MessageResourceFile = args(3) End If Else ' Display a syntax help message. Console.WriteLine("Input:") Console.WriteLine(" source [event log] [machine name] [resource file]") registerSource = False End If ' Set defaults for parameters missing input. If mySourceData.MachineName.Length = 0 ' Default to the local computer. mySourceData.MachineName = "." End If If mySourceData.LogName.Length = 0 ' Default to the Application log. mySourceData.LogName = "Application" End If ' Determine if the source exists on the specified computer. If Not EventLog.SourceExists(mySourceData.Source, _ mySourceData.MachineName) ' The source does not exist. ' Verify that the message file exists ' and the event log is local. If mySourceData.MessageResourceFile <> Nothing AndAlso _ mySourceData.MessageResourceFile.Length > 0 If mySourceData.MachineName = "." If Not System.IO.File.Exists(mySourceData.MessageResourceFile) Console.WriteLine("File {0} not found - message file not set for source.", _ mySourceData.MessageResourceFile) registerSource = False End If Else ' For simplicity, do not allow setting the message ' file for a remote event log. To set the message ' for a remote event log, and for source registration , ' the file path should be specified with system-wide ' environment variables that are valid on the remote ' computer, such as ' "%SystemRoot%\system32\myresource.dll". Console.WriteLine("Message resource file ignored for remote event log.") registerSource = False End If End If Else ' Do not register the source, it already exists. registerSource = False ' Get the event log corresponding to the existing source. Dim sourceLog As string sourceLog = EventLog.LogNameFromSourceName(mySourceData.Source, _ mySourceData.MachineName) ' Determine if the event source is registered for the ' specified log. If sourceLog.ToUpper(CultureInfo.InvariantCulture) <> mySourceData.LogName.ToUpper(CultureInfo.InvariantCulture) ' An existing source is registered ' to write to a different event log. Console.WriteLine("Warning: source {0} is already registered to write to event log {1}", _ mySourceData.Source, sourceLog) Else ' The source is already registered ' to write to the specified event log. Console.WriteLine("Source {0} already registered to write to event log {1}", _ mySourceData.Source, sourceLog) End If End If If registerSource ' Register the new event source for the specified event log. Console.WriteLine("Registering new source {0} for event log {1}.", _ mySourceData.Source, mySourceData.LogName) EventLog.CreateEventSource(mySourceData) Console.WriteLine("Event source was registered successfully!") End If End Sub 'Main End Class 'CreateSourceSample End Namespace 'EventLogSamples
using System; using System.Globalization; using System.Diagnostics; namespace EventLogSamples { class CreateSourceSample { [STAThread] static void Main(string[] args) { EventSourceCreationData mySourceData = new EventSourceCreationData("", ""); bool registerSource = true; // Process input parameters. if (args.Length > 0) { // Require at least the source name. mySourceData.Source = args[0]; if (args.Length > 1) { mySourceData.LogName = args[1]; } if (args.Length > 2) { mySourceData.MachineName = args[2]; } if ((args.Length > 3) && (args[3].Length > 0)) { mySourceData.MessageResourceFile = args[3]; } } else { // Display a syntax help message. Console.WriteLine("Input:"); Console.WriteLine(" source [event log] [machine name] [resource file]"); registerSource = false; } // Set defaults for parameters missing input. if (mySourceData.MachineName.Length == 0) { // Default to the local computer. mySourceData.MachineName = "."; } if (mySourceData.LogName.Length == 0) { // Default to the Application log. mySourceData.LogName = "Application"; } // Determine if the source exists on the specified computer. if (!EventLog.SourceExists(mySourceData.Source, mySourceData.MachineName)) { // The source does not exist. // Verify that the message file exists // and the event log is local. if ((mySourceData.MessageResourceFile != null) && (mySourceData.MessageResourceFile.Length > 0)) { if (mySourceData.MachineName == ".") { if (!System.IO.File.Exists(mySourceData.MessageResourceFile)) { Console.WriteLine("File {0} not found - message file not set for source.", mySourceData.MessageResourceFile); registerSource = false; } } else { // For simplicity, do not allow setting the message // file for a remote event log. To set the message // for a remote event log, and for source registration , // the file path should be specified with system-wide // environment variables that are valid on the remote // computer, such as // "%SystemRoot%\system32\myresource.dll". Console.WriteLine("Message resource file ignored for remote event log."); registerSource = false; } } } else { // Do not register the source, it already exists. registerSource = false; // Get the event log corresponding to the existing source. string sourceLog; sourceLog = EventLog.LogNameFromSourceName(mySourceData.Source, mySourceData.MachineName); // Determine if the event source is registered for the // specified log. if (sourceLog.ToUpper(CultureInfo.InvariantCulture) != mySourceData.LogName.ToUpper(CultureInfo.InvariantCulture)) { // An existing source is registered // to write to a different event log. Console.WriteLine("Warning: source {0} is already registered to write to event log {1}", mySourceData.Source, sourceLog); } else { // The source is already registered // to write to the specified event log. Console.WriteLine("Source {0} already registered to write to event log {1}", mySourceData.Source, sourceLog); } } if (registerSource) { // Register the new event source for the specified event log. Console.WriteLine("Registering new source {0} for event log {1}.", mySourceData.Source, mySourceData.LogName); EventLog.CreateEventSource(mySourceData); Console.WriteLine("Event source was registered successfully!"); } } } }
#using <System.dll> using namespace System; using namespace System::Globalization; using namespace System::Diagnostics; [STAThread] int main() { array<String^>^args = Environment::GetCommandLineArgs(); EventSourceCreationData ^ mySourceData = gcnew EventSourceCreationData( "","" ); bool registerSource = true; // Process input parameters. if ( args->Length > 1 ) { // Require at least the source name. mySourceData->Source = args[ 1 ]; if ( args->Length > 2 ) { mySourceData->LogName = args[ 2 ]; } if ( args->Length > 3 ) { mySourceData->MachineName = args[ 3 ]; } if ( (args->Length > 4) && (args[ 4 ]->Length > 0) ) { mySourceData->MessageResourceFile = args[ 4 ]; } } else { // Display a syntax help message. Console::WriteLine( "Input:" ); Console::WriteLine( " source [event log] [machine name] [resource file]" ); registerSource = false; } // Set defaults for parameters missing input. if ( mySourceData->MachineName->Length == 0 ) { // Default to the local computer. mySourceData->MachineName = "."; } if ( mySourceData->LogName->Length == 0 ) { // Default to the Application log. mySourceData->LogName = "Application"; } // Determine if the source exists on the specified computer. if ( !EventLog::SourceExists( mySourceData->Source, mySourceData->MachineName ) ) { // The source does not exist. // Verify that the message file exists // and the event log is local. if ( (mySourceData->MessageResourceFile != nullptr) && (mySourceData->MessageResourceFile->Length > 0) ) { if ( mySourceData->MachineName->Equals( "." ) ) { if ( !System::IO::File::Exists( mySourceData->MessageResourceFile ) ) { Console::WriteLine( "File {0} not found - message file not set for source.", mySourceData->MessageResourceFile ); registerSource = false; } } else { // For simplicity, do not allow setting the message // file for a remote event log. To set the message // for a remote event log, and for source registration, // the file path should be specified with system-wide // environment variables that are valid on the remote // computer, such as // "%SystemRoot%\system32\myresource.dll". Console::WriteLine( "Message resource file ignored for remote event log." ); registerSource = false; } } } else { // Do not register the source, it already exists. registerSource = false; // Get the event log corresponding to the existing source. String^ sourceLog; sourceLog = EventLog::LogNameFromSourceName( mySourceData->Source, mySourceData->MachineName ); // Determine if the event source is registered for the // specified log. if ( sourceLog->ToUpper( CultureInfo::InvariantCulture ) != mySourceData->LogName->ToUpper( CultureInfo::InvariantCulture ) ) { // An existing source is registered // to write to a different event log. Console::WriteLine( "Warning: source {0} is already registered to write to event log {1}", mySourceData->Source, sourceLog ); } else { // The source is already registered // to write to the specified event log. Console::WriteLine( "Source {0} already registered to write to event log {1}", mySourceData->Source, sourceLog ); } } if ( registerSource ) { // Register the new event source for the specified event log. Console::WriteLine( "Registering new source {0} for event log {1}.", mySourceData->Source, mySourceData->LogName ); EventLog::CreateEventSource( mySourceData ); Console::WriteLine( "Event source was registered successfully!" ); } }


System.Diagnostics.EventSourceCreationData


Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- EventSourceCreationData クラスのページへのリンク