EventSourceCreationData クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ローカル コンピューターまたはリモート コンピューターでイベント ログ ソースを作成するために使用される構成設定を表します。
public ref class EventSourceCreationData
public class EventSourceCreationData
type EventSourceCreationData = class
Public Class EventSourceCreationData
- 継承
-
EventSourceCreationData
例
次のコード例では、コマンド ライン引数からイベント ソースの構成プロパティを設定します。 入力引数は、イベント ソース名、イベント ログ名、コンピューター名、およびイベント メッセージ リソース ファイルを指定します。 このコード例では、ソースが既存のイベント ソースと競合していないことを確認し、指定したイベント ログの新しいイベント ソースを作成します。
#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!" );
}
}
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!");
}
}
}
}
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
End Class
End Namespace 'EventLogSamples
注釈
クラスを EventSourceCreationData 使用して、ローカライズされたエントリをイベント ログに書き込む新しいソースを構成します。 このクラスを使用してイベント ログから読み取る必要はありません。
このクラスは、新しいイベント ソースとそれに関連付けられているイベント ログの構成設定を定義します。 関連付けられたイベント ログは、ローカル コンピューターまたはリモート コンピューター上に存在できます。 ローカル コンピューター上の新規または既存のイベント ログの新しいソースを作成するには、 の プロパティと Source プロパティをEventSourceCreationData設定LogNameし、 メソッドをEventLog.CreateEventSource(EventSourceCreationData)呼び出します。 このメソッドは、 プロパティで指定したイベント ソースを Source 作成し、 で指定したイベント ログに LogName登録します。 この動作は、 クラスを EventLogInstaller 使用してイベント ログのイベント ソースを登録するのと似ています。
イベント ログに WriteEvent イベントを書き込むには、 メソッドと WriteEntry メソッドを使用します。 イベントを書き込むには、イベント ソースを指定する必要があります。最初のエントリをソースと共に書き込む前に、イベント ソースを作成して構成する必要があります。
アプリケーションのインストール中に新しいイベント ソースをCreateします。 これにより、オペレーティング システムが登録されているイベント ソースとその構成の一覧を更新する時間が得られます。 オペレーティング システムがイベント ソースの一覧を更新していない場合、新しいソースでイベントを書き込もうとすると、書き込み操作は失敗します。 を使用するか、 メソッドを EventLogInstaller使用して新しいソースを CreateEventSource 構成できます。 新しいイベント ソースを作成するには、コンピューターの管理者権限が必要です。
既存のイベント ログまたは新しいイベント ログのイベント ソースを作成できます。 新しいイベント ログの新しいソースを作成すると、システムはそのログのソースを登録しますが、最初のエントリが書き込まれるまでログは作成されません。
各ソースは、一度に 1 つのイベント ログにのみ書き込むことができます。ただし、アプリケーションは複数のソースを使用して複数のイベント ログに書き込むことができます。 たとえば、アプリケーションで、異なるイベント ログまたは異なるリソース ファイル用に複数のソースを構成する必要がある場合があります。
既存のソースの構成の詳細を変更するには、ソースを削除してから、新しい構成で作成する必要があります。 他のアプリケーションまたはコンポーネントで既存のソースを使用する場合は、既存のソースを削除するのではなく、更新された構成で新しいソースを作成します。
イベント ソースは、イベント カテゴリとメッセージ文字列のローカライズされたリソースに登録できます。 アプリケーションでは、実際の文字列を指定するのではなく、リソース識別子を使用してイベント ログ エントリを書き込むことができます。 イベント ビューアーは、リソース識別子を使用して、現在の言語設定に基づいてローカライズされたリソース ファイルから対応する文字列を検索して表示します。 イベント カテゴリ、メッセージ、パラメーター挿入文字列用に個別のファイルを登録することも、3 種類の文字列すべてに同じリソース ファイルを登録することもできます。 、CategoryResourceFile、CategoryCountMessageResourceFile、および ParameterResourceFile の各プロパティを使用して、ローカライズされたエントリをイベント ログに書き込むソースを構成します。 アプリケーションがイベント ログに文字列値を直接書き込む場合は、これらのプロパティを設定する必要はありません。
ソースは、ローカライズされたエントリを書き込むか、直接文字列を書き込む目的で構成する必要があります。 メソッドは WriteEntry 、指定された文字列をイベント ログに直接書き込みます。ローカライズ可能なメッセージ リソース ファイルは使用しません。 ローカライズされたメッセージ リソース ファイルを WriteEvent 使用してイベントを書き込むには、 メソッドを使用します。
アプリケーションがリソース識別子と文字列値の両方を使用してエントリを書き込む場合は、2 つの個別のソースを登録する必要があります。 たとえば、リソース ファイルを使用して 1 つのソースを構成し、 メソッドでそのソースを WriteEvent 使用して、リソース識別子を使用してエントリをイベント ログに書き込みます。 次に、リソース ファイルのない別のソースを作成し、 メソッドでそのソースを WriteEntry 使用して、そのソースを使用してイベント ログに文字列を直接書き込みます。
コンストラクター
EventSourceCreationData(String, String) |
指定したイベント ソースおよびイベント ログ名を使用して、EventSourceCreationData クラスの新しいインスタンスを初期化します。 |
プロパティ
CategoryCount |
カテゴリ リソース ファイル内のカテゴリの数を取得または設定します。 |
CategoryResourceFile |
ソースのカテゴリ文字列が格納されたリソース ファイルのパスを取得または設定します。 |
LogName |
ソースがエントリを書き込むイベント ログの名前を取得または設定します。 |
MachineName |
イベント ソースを登録するコンピューターの名前を取得または設定します。 |
MessageResourceFile |
ソースのメッセージ書式指定文字列が格納されたメッセージ リソース ファイルのパスを取得または設定します。 |
ParameterResourceFile |
ソースのメッセージ パラメーター文字列が格納されたリソース ファイルのパスを取得または設定します。 |
Source |
イベント ソースとしてイベント ログに登録する名前を取得または設定します。 |
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
こちらもご覧ください
.NET