次の方法で共有


EventLog.CreateEventSource メソッド

定義

システム上の特定のログにイベント情報を書き込めるアプリケーションを確立します。

オーバーロード

CreateEventSource(EventSourceCreationData)

イベント ソースと対応するイベント ログの指定された構成プロパティを使用して、ローカライズされたイベント メッセージを書き込むための有効なイベント ソースを確立します。

CreateEventSource(String, String)

ローカル コンピューター上のログにエントリを書き込むための有効なイベント ソースとして、指定したソース名を確立します。 このメソッドは、ローカル コンピューターに新しいカスタム ログを作成することもできます。

CreateEventSource(String, String, String)
古い.
古い.
古い.

指定したコンピューター上のログにエントリを書き込むための有効なイベント ソースとして、指定したソース名を確立します。 このメソッドを使用して、指定したコンピューターに新しいカスタム ログを作成することもできます。

CreateEventSource(EventSourceCreationData)

ソース:
EventLog.cs
ソース:
EventLog.cs
ソース:
EventLog.cs
ソース:
EventLog.cs

イベント ソースと対応するイベント ログの指定された構成プロパティを使用して、ローカライズされたイベント メッセージを書き込むための有効なイベント ソースを確立します。

public:
 static void CreateEventSource(System::Diagnostics::EventSourceCreationData ^ sourceData);
public static void CreateEventSource (System.Diagnostics.EventSourceCreationData sourceData);
static member CreateEventSource : System.Diagnostics.EventSourceCreationData -> unit
Public Shared Sub CreateEventSource (sourceData As EventSourceCreationData)

パラメーター

sourceData
EventSourceCreationData

イベント ソースとそのターゲット イベント ログの構成プロパティ。

例外

sourceData で指定されたコンピューター名が無効です。

-又は-

sourceData で指定されたソース名が null

-又は-

sourceData で指定されたログ名が無効です。 イベント ログ名は印刷可能な文字で構成する必要があり、文字 '*'、'?'、または '\' を含めることはできません。

-又は-

sourceData で指定されたログ名は、ユーザー ログの作成には無効です。 イベント ログ名 AppEvent、SysEvent、および SecEvent は、システムで使用するために予約されています。

-又は-

ログ名は、既存のイベント ソース名と一致します。

-又は-

sourceData で指定されたソース名は、254 文字を超えるレジストリ キー パスになります。

-又は-

sourceData で指定されたログ名の最初の 8 文字は一意ではありません。

-又は-

sourceData で指定されたソース名は既に登録されています。

-又は-

sourceData で指定されたソース名は、既存のイベント ログ名と一致します。

イベント ログのレジストリ キーを開くことができませんでした。

sourceDatanullです。

次の例では、SampleApplicationSource という名前のイベント ソースがローカル コンピューターに登録されているかどうかを確認します。 イベント ソースが存在しない場合は、ソースのメッセージ リソース ファイルを設定し、新しいイベント ソースを作成します。 最後に、イベント ログのローカライズされた表示名を、DisplayNameMsgId のリソース識別子の値と、messageFileのリソース ファイル パスを使用して設定します。

void CreateEventSourceSample1( String^ messageFile )
{
   String^ myLogName;
   String^ sourceName = "SampleApplicationSource";
   
   // Create the event source if it does not exist.
   if (  !EventLog::SourceExists( sourceName ) )
   {
      
      // Create a new event source for the custom event log
      // named "myNewLog."  
      myLogName = "myNewLog";
      EventSourceCreationData ^ mySourceData = gcnew EventSourceCreationData( sourceName,myLogName );
      
      // Set the message resource file that the event source references.
      // All event resource identifiers correspond to text in this file.
      if (  !System::IO::File::Exists( messageFile ) )
      {
         Console::WriteLine( "Input message resource file does not exist - {0}", messageFile );
         messageFile = "";
      }
      else
      {
         
         // Set the specified file as the resource
         // file for message text, category text, and 
         // message parameter strings.  
         mySourceData->MessageResourceFile = messageFile;
         mySourceData->CategoryResourceFile = messageFile;
         mySourceData->CategoryCount = CategoryCount;
         mySourceData->ParameterResourceFile = messageFile;
         Console::WriteLine( "Event source message resource file set to {0}", messageFile );
      }

      Console::WriteLine( "Registering new source for event log." );
      EventLog::CreateEventSource( mySourceData );
   }
   else
   {
      
      // Get the event log corresponding to the existing source.
      myLogName = EventLog::LogNameFromSourceName( sourceName, "." );
   }

   
   // Register the localized name of the event log.
   // For example, the actual name of the event log is "myNewLog," but
   // the event log name displayed in the Event Viewer might be
   // "Sample Application Log" or some other application-specific
   // text.
   EventLog^ myEventLog = gcnew EventLog( myLogName,".",sourceName );
   if ( messageFile->Length > 0 )
   {
      myEventLog->RegisterDisplayName( messageFile, DisplayNameMsgId );
   }   
}
static void CreateEventSourceSample1(string messageFile)
{
    string myLogName;
    string sourceName = "SampleApplicationSource";

    // Create the event source if it does not exist.
    if(!EventLog.SourceExists(sourceName))
    {
        // Create a new event source for the custom event log
        // named "myNewLog."

        myLogName = "myNewLog";
        EventSourceCreationData mySourceData = new EventSourceCreationData(sourceName, myLogName);

        // Set the message resource file that the event source references.
        // All event resource identifiers correspond to text in this file.
        if (!System.IO.File.Exists(messageFile))
        {
            Console.WriteLine("Input message resource file does not exist - {0}",
                messageFile);
            messageFile = "";
        }
        else
        {
            // Set the specified file as the resource
            // file for message text, category text, and
            // message parameter strings.

            mySourceData.MessageResourceFile = messageFile;
            mySourceData.CategoryResourceFile = messageFile;
            mySourceData.CategoryCount = CategoryCount;
            mySourceData.ParameterResourceFile = messageFile;

            Console.WriteLine("Event source message resource file set to {0}",
                messageFile);
        }

        Console.WriteLine("Registering new source for event log.");
        EventLog.CreateEventSource(mySourceData);
    }
    else
    {
        // Get the event log corresponding to the existing source.
        myLogName = EventLog.LogNameFromSourceName(sourceName,".");
    }

    // Register the localized name of the event log.
    // For example, the actual name of the event log is "myNewLog," but
    // the event log name displayed in the Event Viewer might be
    // "Sample Application Log" or some other application-specific
    // text.
    EventLog myEventLog = new EventLog(myLogName, ".", sourceName);

    if (messageFile.Length > 0)
    {
        myEventLog.RegisterDisplayName(messageFile, DisplayNameMsgId);
    }
}
Public Shared Sub CreateEventSourceSample1(ByVal messageFile As String)

    Dim myLogName As String
    Dim sourceName As String = "SampleApplicationSource"

    ' Create the event source if it does not exist.
    If Not EventLog.SourceExists(sourceName)
    
        ' Create a new event source for the custom event log
        ' named "myNewLog."  

        myLogName = "myNewLog"
        Dim mySourceData As EventSourceCreationData = New EventSourceCreationData(sourceName, myLogName)

        ' Set the message resource file that the event source references.
        ' All event resource identifiers correspond to text in this file.
        If Not System.IO.File.Exists(messageFile)

            Console.WriteLine("Input message resource file does not exist - {0}", _
                messageFile)
            messageFile = ""
        Else 
            ' Set the specified file as the resource
            ' file for message text, category text and 
            ' message parameters strings.

            mySourceData.MessageResourceFile = messageFile
            mySourceData.CategoryResourceFile = messageFile
            mySourceData.CategoryCount = CategoryCount
            mySourceData.ParameterResourceFile = messageFile

            Console.WriteLine("Event source message resource file set to {0}", _
                messageFile)
        End If

        Console.WriteLine("Registering new source for event log.")
        EventLog.CreateEventSource(mySourceData)
    Else
        ' Get the event log corresponding to the existing source.
        myLogName = EventLog.LogNameFromSourceName(sourceName,".")
    End If

    ' Register the localized name of the event log.
    ' For example, the actual name of the event log is "myNewLog," but
    ' the event log name displayed in the Event Viewer might be
    ' "Sample Application Log" or some other application-specific
    ' text.
    Dim myEventLog As EventLog = New EventLog(myLogName, ".", sourceName)
    
    If messageFile.Length > 0
        myEventLog.RegisterDisplayName(messageFile, DisplayNameMsgId)
    End If
End Sub

この例では、リソース ライブラリ EventLogMsgs.dllに組み込まれている次のメッセージ テキスト ファイルを使用します。 メッセージ テキスト ファイルは、メッセージ リソース ファイルの作成元のソースです。 メッセージ テキスト ファイルは、カテゴリ、イベント メッセージ、およびパラメーター挿入文字列のリソース識別子とテキストを定義します。 具体的には、リソース識別子 5001 は、イベント ログのローカライズされた名前に対して定義されます。

; // EventLogMsgs.mc
; // ********************************************************

; // Use the following commands to build this file:

; //   mc -s EventLogMsgs.mc
; //   rc EventLogMsgs.rc
; //   link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res
; // ********************************************************

; // - Event categories -
; // Categories must be numbered consecutively starting at 1.
; // ********************************************************

MessageId=0x1
Severity=Success
SymbolicName=INSTALL_CATEGORY
Language=English
Installation
.

MessageId=0x2
Severity=Success
SymbolicName=QUERY_CATEGORY
Language=English
Database Query
.

MessageId=0x3
Severity=Success
SymbolicName=REFRESH_CATEGORY
Language=English
Data Refresh
.

; // - Event messages -
; // *********************************

MessageId = 1000
Severity = Success
Facility = Application
SymbolicName = AUDIT_SUCCESS_MESSAGE_ID_1000
Language=English
My application message text, in English, for message id 1000, called from %1.
.

MessageId = 1001
Severity = Warning
Facility = Application
SymbolicName = AUDIT_FAILED_MESSAGE_ID_1001
Language=English
My application message text, in English, for message id 1001, called from %1.
.

MessageId = 1002
Severity = Success
Facility = Application
SymbolicName = GENERIC_INFO_MESSAGE_ID_1002
Language=English
My generic information message in English, for message id 1002.
.

MessageId = 1003
Severity = Warning
Facility = Application
SymbolicName = GENERIC_WARNING_MESSAGE_ID_1003
Language=English
My generic warning message in English, for message id 1003, called from %1.
.

MessageId = 1004
Severity = Success
Facility = Application
SymbolicName = UPDATE_CYCLE_COMPLETE_MESSAGE_ID_1004
Language=English
The update cycle is complete for %%5002.
.

MessageId = 1005
Severity = Warning
Facility = Application
SymbolicName = SERVER_CONNECTION_DOWN_MESSAGE_ID_1005
Language=English
The refresh operation did not complete because the connection to server %1 could not be established.
.

; // - Event log display name -
; // ********************************************************

MessageId = 5001
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_DISPLAY_NAME_MSGID
Language=English
Sample Event Log
.

; // - Event message parameters -
; //   Language independent insertion strings
; // ********************************************************

MessageId = 5002
Severity = Success
Facility = Application
SymbolicName = EVENT_LOG_SERVICE_NAME_MSGID
Language=English
SVC_UPDATE.EXE
.

注釈

このオーバーロードを使用して、ローカル コンピューターまたはリモート コンピューター上のイベント ログにエントリを書き込むための新しいソースを構成します。 このメソッドを使用してイベント ログから読み取る必要はありません。

CreateEventSource メソッドは、入力 sourceDataSourceLogName、および MachineName プロパティを使用して、新しいソースとそれに関連付けられているイベント ログのターゲット コンピューターにレジストリ値を作成します。 新しいソース名は、ターゲット コンピューター上の既存のソース名または既存のイベント ログ名と一致できません。 LogName プロパティが設定されていない場合、ソースはアプリケーション イベント ログに登録されます。 MachineName が設定されていない場合、ソースはローカル コンピューターに登録されます。

手記

Windows Vista 以降または Windows Server 2003 でイベント ソースを作成するには、管理者特権が必要です。

この要件の理由は、セキュリティを含むすべてのイベント ログを検索して、イベント ソースが一意かどうかを判断する必要があるということです。 Windows Vista 以降、ユーザーはセキュリティ ログにアクセスするアクセス許可を持っていません。したがって、SecurityException がスローされます。

Windows Vista 以降では、ユーザー アカウント制御 (UAC) によってユーザーの権限が決定されます。 組み込みの Administrators グループのメンバーである場合は、標準ユーザー アクセス トークンと管理者アクセス トークンという 2 つのランタイム アクセス トークンが割り当てられます。 既定では、ユーザーは標準のユーザー ロールになります。 セキュリティ ログにアクセスするコードを実行するには、まず特権を標準ユーザーから管理者に昇格させる必要があります。 これを行うには、アプリケーション アイコンを右クリックし、管理者として実行することを示すことで、アプリケーションを起動します。

イベント ログにイベントを書き込むには、WriteEventWriteEntry を使用します。 イベントを書き込むイベント ソースを指定する必要があります。最初のエントリをソースに書き込む前に、イベント ソースを作成して構成する必要があります。

アプリケーションのインストール中に新しいイベント ソースを作成します。 これにより、オペレーティング システムが登録されているイベント ソースとその構成の一覧を更新する時間が得られます。 オペレーティング システムがイベント ソースの一覧を更新せず、新しいソースでイベントを書き込もうとすると、書き込み操作は失敗します。 新しいソースは、EventLogInstallerまたは CreateEventSource メソッドを使用して構成できます。 新しいイベント ソースを作成するには、コンピューターの管理者権限が必要です。

既存のイベント ログまたは新しいイベント ログのイベント ソースを作成できます。 新しいイベント ログの新しいソースを作成すると、システムはそのログのソースを登録しますが、最初のエントリが書き込まれるまでログは作成されません。

オペレーティング システムは、イベント ログをファイルとして格納します。 EventLogInstaller または CreateEventSource を使用して新しいイベント ログを作成すると、関連付けられているファイルは、指定したコンピューターの %SystemRoot%\System32\Config ディレクトリに格納されます。 ファイル名は、Log プロパティの最初の 8 文字に ".evt" ファイル名拡張子を付加することによって設定されます。

各ソースは、一度に 1 つのイベント ログにのみ書き込むことができます。ただし、アプリケーションは複数のソースを使用して複数のイベント ログに書き込むことができます。 たとえば、アプリケーションで、異なるイベント ログまたは異なるリソース ファイル用に構成された複数のソースが必要な場合があります。

イベント カテゴリとメッセージ文字列のローカライズされたリソース ファイルにイベント ソースを登録できます。 アプリケーションでは、実際の文字列を指定するのではなく、リソース識別子を使用してイベント ログ エントリを書き込むことができます。 イベント ビューアーでは、リソース識別子を使用して、現在の言語設定に基づいてローカライズされたリソース ファイルから対応する文字列を検索して表示します。 イベント カテゴリ、メッセージ、パラメーター挿入文字列用に個別のファイルを登録することも、3 種類の文字列すべてに同じリソース ファイルを登録することもできます。 CategoryCountCategoryResourceFileMessageResourceFile、および ParameterResourceFile プロパティを使用して、ローカライズされたエントリをイベント ログに書き込むソースを構成します。 アプリケーションがイベント ログに文字列値を直接書き込む場合、これらのプロパティを設定する必要はありません。

ソースは、ローカライズされたエントリの書き込みまたは直接文字列の書き込み用に構成する必要があります。 アプリケーションがリソース識別子と文字列値の両方を使用してエントリを書き込む場合は、2 つの個別のソースを登録する必要があります。 たとえば、リソース ファイルを使用して 1 つのソースを構成し、WriteEvent メソッドでそのソースを使用して、リソース識別子を使用してエントリをイベント ログに書き込みます。 次に、リソース ファイルを含まない別のソースを作成し、WriteEntry メソッドでそのソースを使用して、そのソースを使用してイベント ログに直接文字列を書き込みます。

既存のソースの構成の詳細を変更するには、ソースを削除し、新しい構成で作成する必要があります。 他のアプリケーションまたはコンポーネントが既存のソースを使用する場合は、既存のソースを削除するのではなく、更新された構成で新しいソースを作成します。

手記

ソースがイベント ログ用に構成されていて、別のイベント ログ用に再構成する場合は、変更を有効にするためにコンピューターを再起動する必要があります。

こちらもご覧ください

適用対象

CreateEventSource(String, String)

ソース:
EventLog.cs
ソース:
EventLog.cs
ソース:
EventLog.cs
ソース:
EventLog.cs

ローカル コンピューター上のログにエントリを書き込むための有効なイベント ソースとして、指定したソース名を確立します。 このメソッドは、ローカル コンピューターに新しいカスタム ログを作成することもできます。

public:
 static void CreateEventSource(System::String ^ source, System::String ^ logName);
public static void CreateEventSource (string source, string logName);
static member CreateEventSource : string * string -> unit
Public Shared Sub CreateEventSource (source As String, logName As String)

パラメーター

source
String

アプリケーションがローカル コンピューターに登録されるソース名。

logName
String

ソースのエントリが書き込まれるログの名前。 使用可能な値には、アプリケーション、システム、またはカスタム イベント ログがあります。

例外

source は空の文字列 ("") または nullです。

-又は-

logName は有効なイベント ログ名ではありません。 イベント ログ名は印刷可能な文字で構成する必要があり、文字 '*'、'?'、または '\' を含めることはできません。

-又は-

logName は、ユーザー ログの作成には無効です。 イベント ログ名 AppEvent、SysEvent、および SecEvent は、システムで使用するために予約されています。

-又は-

ログ名は、既存のイベント ソース名と一致します。

-又は-

ソース名は、254 文字を超えるレジストリ キー パスになります。

-又は-

logName の最初の 8 文字は、既存のイベント ログ名の最初の 8 文字と一致します。

-又は-

ソースはローカル コンピューターに既に存在するため、登録できません。

-又は-

ソース名は、既存のイベント ログ名と一致します。

イベント ログのレジストリ キーをローカル コンピューターで開くことができませんでした。

次の例では、ソース MySource がまだ存在しない場合は作成し、イベント ログ MyNewLogにエントリを書き込みます。

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
   
   // Create the source, if it does not already exist.
   if (  !EventLog::SourceExists( "MySource" ) )
   {
      //An event log source should not be created and immediately used.
      //There is a latency time to enable the source, it should be created
      //prior to executing the application that uses the source.
      //Execute this sample a second time to use the new source.
      EventLog::CreateEventSource( "MySource", "MyNewLog" );
      Console::WriteLine( "CreatingEventSource" );
      // The source is created.  Exit the application to allow it to be registered.
      return 0;
   }

   
   // Create an EventLog instance and assign its source.
   EventLog^ myLog = gcnew EventLog;
   myLog->Source = "MySource";
   
   // Write an informational entry to the event log.    
   myLog->WriteEntry( "Writing to event log." );
}
using System;
using System.Diagnostics;
using System.Threading;

class MySample{

    public static void Main(){

        // Create the source, if it does not already exist.
        if(!EventLog.SourceExists("MySource"))
        {
             //An event log source should not be created and immediately used.
             //There is a latency time to enable the source, it should be created
             //prior to executing the application that uses the source.
             //Execute this sample a second time to use the new source.
            EventLog.CreateEventSource("MySource", "MyNewLog");
            Console.WriteLine("CreatedEventSource");
            Console.WriteLine("Exiting, execute the application a second time to use the source.");
            // The source is created.  Exit the application to allow it to be registered.
            return;
        }

        // Create an EventLog instance and assign its source.
        EventLog myLog = new EventLog();
        myLog.Source = "MySource";

        // Write an informational entry to the event log.
        myLog.WriteEntry("Writing to event log.");
    }
}
Option Explicit
Option Strict

Imports System.Diagnostics
Imports System.Threading

Class MySample
    Public Shared Sub Main()
        
        If Not EventLog.SourceExists("MySource") Then
            ' Create the source, if it does not already exist.
            ' An event log source should not be created and immediately used.
            ' There is a latency time to enable the source, it should be created
            ' prior to executing the application that uses the source.
            ' Execute this sample a second time to use the new source.
            EventLog.CreateEventSource("MySource", "MyNewLog")
            Console.WriteLine("CreatingEventSource")
            'The source is created.  Exit the application to allow it to be registered.
            Return
        End If
        
        ' Create an EventLog instance and assign its source.
        Dim myLog As New EventLog()
        myLog.Source = "MySource"
        
        ' Write an informational entry to the event log.    
        myLog.WriteEntry("Writing to event log.")
    End Sub
End Class

注釈

このオーバーロードを使用して、カスタム ログを作成するか、ローカル コンピューター上の既存のログに Source を作成して登録します。

CreateEventSourceを呼び出すときに logNamenull または空の文字列 ("") の場合、ログは既定でアプリケーション ログに設定されます。 ローカル コンピューターにログが存在しない場合、システムはカスタム ログを作成し、そのログの Source としてアプリケーションを登録します。

手記

Windows Vista 以降または Windows Server 2003 でイベント ソースを作成するには、管理者特権が必要です。

この要件の理由は、セキュリティを含むすべてのイベント ログを検索して、イベント ソースが一意かどうかを判断する必要があるということです。 Windows Vista 以降、ユーザーはセキュリティ ログにアクセスするアクセス許可を持っていません。したがって、SecurityException がスローされます。

Windows Vista 以降では、ユーザー アカウント制御 (UAC) によってユーザーの権限が決定されます。 組み込みの Administrators グループのメンバーである場合は、標準ユーザー アクセス トークンと管理者アクセス トークンという 2 つのランタイム アクセス トークンが割り当てられます。 既定では、ユーザーは標準のユーザー ロールになります。 セキュリティ ログにアクセスするコードを実行するには、まず特権を標準ユーザーから管理者に昇格させる必要があります。 これを行うには、アプリケーション アイコンを右クリックし、管理者として実行することを示すことで、アプリケーションを起動します。

イベント ログに書き込む場合にのみ、イベント ソースを作成する必要があります。 イベント ログにエントリを書き込む前に、イベント ソースをイベント の有効なソースとしてイベント ログに登録する必要があります。 ログエントリを書き込むと、システムは Source を使用してエントリを配置する適切なログを検索します。 イベント ログを読み取る場合は、Sourceを指定するか、LogMachineNameを指定できます。

手記

ローカル コンピューター上のログに接続する場合は、MachineName を指定する必要はありません。 ログからの読み取り時に MachineName を指定しない場合は、ローカル コンピューター (".") が想定されます。

イベント ログにイベントを書き込むには、WriteEventWriteEntry を使用します。 イベントを書き込むイベント ソースを指定する必要があります。最初のエントリをソースに書き込む前に、イベント ソースを作成して構成する必要があります。

アプリケーションのインストール中に新しいイベント ソースを作成します。 これにより、オペレーティング システムが登録されているイベント ソースとその構成の一覧を更新する時間が得られます。 オペレーティング システムがイベント ソースの一覧を更新せず、新しいソースでイベントを書き込もうとすると、書き込み操作は失敗します。 新しいソースは、EventLogInstallerまたは CreateEventSource メソッドを使用して構成できます。 新しいイベント ソースを作成するには、コンピューターの管理者権限が必要です。

既存のイベント ログまたは新しいイベント ログのイベント ソースを作成できます。 新しいイベント ログの新しいソースを作成すると、システムはそのログのソースを登録しますが、最初のエントリが書き込まれるまでログは作成されません。

オペレーティング システムは、イベント ログをファイルとして格納します。 EventLogInstaller または CreateEventSource を使用して新しいイベント ログを作成すると、関連付けられているファイルは、指定したコンピューターの %SystemRoot%\System32\Config ディレクトリに格納されます。 ファイル名は、Log プロパティの最初の 8 文字に ".evt" ファイル名拡張子を付加することによって設定されます。

ソースはローカル コンピューター上で一意である必要があります。新しいソース名が既存のソース名または既存のイベント ログ名と一致することはできません。 各ソースは、一度に 1 つのイベント ログにのみ書き込むことができます。ただし、アプリケーションは複数のソースを使用して複数のイベント ログに書き込むことができます。 たとえば、アプリケーションで、異なるイベント ログまたは異なるリソース ファイル用に構成された複数のソースが必要な場合があります。

ソースは、ローカライズされたエントリの書き込みまたは直接文字列の書き込み用に構成する必要があります。 アプリケーションがリソース識別子と文字列値の両方を使用してエントリを書き込む場合は、2 つの個別のソースを登録する必要があります。 たとえば、リソース ファイルを使用して 1 つのソースを構成し、WriteEvent メソッドでそのソースを使用して、リソース識別子を使用してエントリをイベント ログに書き込みます。 次に、リソース ファイルを含まない別のソースを作成し、WriteEntry メソッドでそのソースを使用して、そのソースを使用してイベント ログに直接文字列を書き込みます。

既存のソースの構成の詳細を変更するには、ソースを削除し、新しい構成で作成する必要があります。 他のアプリケーションまたはコンポーネントが既存のソースを使用する場合は、既存のソースを削除するのではなく、更新された構成で新しいソースを作成します。

手記

ソースが既にログにマップされていて、それを新しいログに再マップする場合は、変更を有効にするためにコンピューターを再起動する必要があります。

こちらもご覧ください

適用対象

CreateEventSource(String, String, String)

ソース:
EventLog.cs
ソース:
EventLog.cs
ソース:
EventLog.cs
ソース:
EventLog.cs

注意事項

EventLog.CreateEventSource has been deprecated. Use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.

注意事項

This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. http://go.microsoft.com/fwlink/?linkid=14202

注意事項

This method has been deprecated. Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead. https://go.microsoft.com/fwlink/?linkid=14202

指定したコンピューター上のログにエントリを書き込むための有効なイベント ソースとして、指定したソース名を確立します。 このメソッドを使用して、指定したコンピューターに新しいカスタム ログを作成することもできます。

public:
 static void CreateEventSource(System::String ^ source, System::String ^ logName, System::String ^ machineName);
[System.Obsolete("EventLog.CreateEventSource has been deprecated. Use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.")]
public static void CreateEventSource (string source, string logName, string machineName);
public static void CreateEventSource (string source, string logName, string machineName);
[System.Obsolete("This method has been deprecated.  Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.  http://go.microsoft.com/fwlink/?linkid=14202")]
public static void CreateEventSource (string source, string logName, string machineName);
[System.Obsolete("This method has been deprecated.  Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.  https://go.microsoft.com/fwlink/?linkid=14202")]
public static void CreateEventSource (string source, string logName, string machineName);
[<System.Obsolete("EventLog.CreateEventSource has been deprecated. Use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.")>]
static member CreateEventSource : string * string * string -> unit
static member CreateEventSource : string * string * string -> unit
[<System.Obsolete("This method has been deprecated.  Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.  http://go.microsoft.com/fwlink/?linkid=14202")>]
static member CreateEventSource : string * string * string -> unit
[<System.Obsolete("This method has been deprecated.  Please use System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) instead.  https://go.microsoft.com/fwlink/?linkid=14202")>]
static member CreateEventSource : string * string * string -> unit
Public Shared Sub CreateEventSource (source As String, logName As String, machineName As String)

パラメーター

source
String

指定したコンピューターにアプリケーションを登録するソース。

logName
String

ソースのエントリが書き込まれるログの名前。 使用可能な値には、アプリケーション、システム、またはカスタム イベント ログがあります。 値を指定しない場合、logName は既定で Application になります。

machineName
String

このイベント ソースを登録するコンピューターの名前。ローカル コンピューターの場合は "." です。

属性

例外

machineName が有効なコンピューター名ではありません。

-又は-

source は空の文字列 ("") または nullです。

-又は-

logName は有効なイベント ログ名ではありません。 イベント ログ名は印刷可能な文字で構成する必要があり、文字 '*'、'?'、または '\' を含めることはできません。

-又は-

logName は、ユーザー ログの作成には無効です。 イベント ログ名 AppEvent、SysEvent、および SecEvent は、システムで使用するために予約されています。

-又は-

ログ名は、既存のイベント ソース名と一致します。

-又は-

ソース名は、254 文字を超えるレジストリ キー パスになります。

-又は-

logName の最初の 8 文字は、指定したコンピューター上の既存のイベント ログ名の最初の 8 文字と一致します。

-又は-

指定したコンピューターにソースが既に存在するため、ソースを登録できません。

-又は-

ソース名は、既存のイベント ソース名と一致します。

指定したコンピューターでイベント ログのレジストリ キーを開くことができませんでした。

次の例では、コンピューター MyServerにソース MySource を作成し、イベント ログ MyNewLogにエントリを書き込みます。

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
   
   // Create the source, if it does not already exist.
   if (  !EventLog::SourceExists( "MySource", "MyServer" ) )
   {
      EventLog::CreateEventSource( "MySource", "MyNewLog", "MyServer" );
      Console::WriteLine( "CreatingEventSource" );
   }

   
   // Create an EventLog instance and assign its source.
   EventLog^ myLog = gcnew EventLog;
   myLog->Source = "MySource";
   
   // Write an informational entry to the event log.    
   myLog->WriteEntry( "Writing to event log." );
   Console::WriteLine( "Message written to event log." );
}
using System;
using System.Diagnostics;
using System.Threading;

class MySample{

    public static void Main(){

        // Create the source, if it does not already exist.
        if(!EventLog.SourceExists("MySource", "MyServer"))
        {
            // An event log source should not be created and immediately used.
            // There is a latency time to enable the source, it should be created
            // prior to executing the application that uses the source.
            // Execute this sample a second time to use the new source.
            EventLog.CreateEventSource("MySource", "MyNewLog", "MyServer");
            Console.WriteLine("CreatingEventSource");
            Console.WriteLine("Exiting, execute the application a second time to use the source.");
            // The source is created.  Exit the application to allow it to be registered.
            return;
        }

        // Create an EventLog instance and assign its source.
        EventLog myLog = new EventLog();
        myLog.Source = "MySource";

        // Write an informational entry to the event log.
        myLog.WriteEntry("Writing to event log.");

        Console.WriteLine("Message written to event log.");
    }
}
Imports System.Diagnostics
Imports System.Threading

Class MySample
    Public Shared Sub Main()
        ' Create the source, if it does not already exist.
        If Not EventLog.SourceExists("MySource", "MyServer") Then
            EventLog.CreateEventSource("MySource", "MyNewLog", "MyServer")
            Console.WriteLine("CreatingEventSource")
        End If
        
        ' Create an EventLog instance and assign its source.
        Dim myLog As New EventLog()
        myLog.Source = "MySource"
        
        ' Write an informational entry to the event log.    
        myLog.WriteEntry("Writing to event log.")
        
        Console.WriteLine("Message written to event log.")
    End Sub
End Class

注釈

このオーバーロードを使用して、カスタム ログを作成するか、指定したコンピューター上の既存のログに Source を作成して登録します。

CreateEventSourceを呼び出すときに logNamenull または空の文字列 ("") の場合、ログは既定でアプリケーション ログに設定されます。 指定したコンピューターにログが存在しない場合、システムはカスタム ログを作成し、そのログの Source としてアプリケーションを登録します。

イベント ログに書き込む場合にのみ、イベント ソースを作成する必要があります。 イベント ログにエントリを書き込む前に、イベント ソースをイベント の有効なソースとしてイベント ログに登録する必要があります。 ログエントリを書き込むと、システムは Source を使用してエントリを配置する適切なログを検索します。 イベント ログを読み取る場合は、Sourceを指定するか、LogMachineNameを指定できます。

手記

Windows Vista 以降または Windows Server 2003 でイベント ソースを作成するには、管理者特権が必要です。

この要件の理由は、セキュリティを含むすべてのイベント ログを検索して、イベント ソースが一意かどうかを判断する必要があるということです。 Windows Vista 以降では、ユーザーはセキュリティ ログにアクセスするアクセス許可を持っていません。したがって、SecurityException がスローされます。

Windows Vista 以降では、ユーザー アカウント制御 (UAC) によってユーザーの権限が決定されます。 組み込みの Administrators グループのメンバーである場合は、標準ユーザー アクセス トークンと管理者アクセス トークンという 2 つのランタイム アクセス トークンが割り当てられます。 既定では、ユーザーは標準のユーザー ロールになります。 セキュリティ ログにアクセスするコードを実行するには、まず特権を標準ユーザーから管理者に昇格させる必要があります。 これを行うには、アプリケーション アイコンを右クリックし、管理者として実行することを示すことで、アプリケーションを起動します。

イベント ログにイベントを書き込むには、WriteEventWriteEntry を使用します。 イベントを書き込むイベント ソースを指定する必要があります。最初のエントリをソースに書き込む前に、イベント ソースを作成して構成する必要があります。

アプリケーションのインストール中に新しいイベント ソースを作成します。 これにより、オペレーティング システムが登録されているイベント ソースとその構成の一覧を更新する時間が得られます。 オペレーティング システムがイベント ソースの一覧を更新せず、新しいソースでイベントを書き込もうとすると、書き込み操作は失敗します。 新しいソースは、EventLogInstallerまたは CreateEventSource メソッドを使用して構成できます。 新しいイベント ソースを作成するには、コンピューターの管理者権限が必要です。

既存のイベント ログまたは新しいイベント ログのイベント ソースを作成できます。 新しいイベント ログの新しいソースを作成すると、システムはそのログのソースを登録しますが、最初のエントリが書き込まれるまでログは作成されません。

オペレーティング システムは、イベント ログをファイルとして格納します。 EventLogInstaller または CreateEventSource を使用して新しいイベント ログを作成すると、関連付けられているファイルは、指定したコンピューターの %SystemRoot%\System32\Config ディレクトリに格納されます。 ファイル名は、Log プロパティの最初の 8 文字に ".evt" ファイル名拡張子を付加することによって設定されます。

ソースはローカル コンピューター上で一意である必要があります。新しいソース名が既存のソース名または既存のイベント ログ名と一致することはできません。 各ソースは、一度に 1 つのイベント ログにのみ書き込むことができます。ただし、アプリケーションは複数のソースを使用して複数のイベント ログに書き込むことができます。 たとえば、アプリケーションで、異なるイベント ログまたは異なるリソース ファイル用に構成された複数のソースが必要な場合があります。

ソースは、ローカライズされたエントリの書き込みまたは直接文字列の書き込み用に構成する必要があります。 アプリケーションがリソース識別子と文字列値の両方を使用してエントリを書き込む場合は、2 つの個別のソースを登録する必要があります。 たとえば、リソース ファイルを使用して 1 つのソースを構成し、WriteEvent メソッドでそのソースを使用して、リソース識別子を使用してエントリをイベント ログに書き込みます。 次に、リソース ファイルを含まない別のソースを作成し、WriteEntry メソッドでそのソースを使用して、そのソースを使用してイベント ログに直接文字列を書き込みます。

既存のソースの構成の詳細を変更するには、ソースを削除し、新しい構成で作成する必要があります。 他のアプリケーションまたはコンポーネントが既存のソースを使用する場合は、既存のソースを削除するのではなく、更新された構成で新しいソースを作成します。

手記

ソースが既にログにマップされていて、それを新しいログに再マップする場合は、変更を有効にするためにコンピューターを再起動する必要があります。

こちらもご覧ください

適用対象