EventLog.SourceExists 方法

定义

在计算机的注册表中搜索给定的事件源。

重载

SourceExists(String)

确定事件源是否已在本地计算机上注册。

SourceExists(String, String)

确定事件源是否已在指定的计算机上注册。

SourceExists(String)

Source:
EventLog.cs
Source:
EventLog.cs
Source:
EventLog.cs

确定事件源是否已在本地计算机上注册。

public:
 static bool SourceExists(System::String ^ source);
public static bool SourceExists (string source);
static member SourceExists : string -> bool
Public Shared Function SourceExists (source As String) As Boolean

参数

source
String

事件源的名称。

返回

如果事件源已在本地计算机上注册,则为 true;否则为 false

例外

未找到 source,无法搜索部分或全部事件日志。

示例

以下示例创建源 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" ) )
   {
      EventLog::CreateEventSource( "MySource", "MyNewLog" );
      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"))
        {
            // 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");
            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.");
    }
}
Option Explicit
Option Strict
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") Then
            EventLog.CreateEventSource("MySource", "MyNewLog")
            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

注解

使用此方法可确定本地计算机上是否存在事件源。 如果要确定本地计算机上是否存在日志,请使用 Exists

由于此方法访问注册表,因此必须在本地计算机上具有相应的注册表权限;否则, SecurityException 将引发 。

注意

若要在 Windows Vista 及更高版本或 Windows Server 2003 中搜索事件源,必须具有管理权限。

此要求的原因是必须搜索所有事件日志(包括安全性),以确定事件源是否唯一。 从 Windows Vista 开始,用户无权访问安全日志;因此, SecurityException 会引发 。

从 Windows Vista 开始,用户帐户控制 (UAC) 确定用户的权限。 如果您是内置的 Administrators 组的成员,将为您分配两个运行时访问令牌:一个标准用户访问令牌和一个管理员访问令牌。 默认情况下,您拥有标准用户角色。 若要执行访问性能计数器的代码,必须先将权限从标准用户提升为管理员。 你可以通过以下方式执行此操作:右键单击应用程序图标并指示需以管理员身份运行。

注意

在帐户下 LocalSystem 执行的服务没有执行此方法所需的权限。 解决方法是检查 事件源是否存在于 中ServiceInstaller,如果不存在,则在安装程序中创建源。

由于无法为新源指定同一计算机上现有源的名称,因此请在尝试调用 CreateEventSource 之前使用此方法,以确保本地计算机上尚不存在具有 指定 source 名称的源。 参数 source 不区分大小写。

另请参阅

适用于

SourceExists(String, String)

Source:
EventLog.cs
Source:
EventLog.cs
Source:
EventLog.cs

确定事件源是否已在指定的计算机上注册。

public:
 static bool SourceExists(System::String ^ source, System::String ^ machineName);
public static bool SourceExists (string source, string machineName);
static member SourceExists : string * string -> bool
Public Shared Function SourceExists (source As String, machineName As String) As Boolean

参数

source
String

事件源的名称。

machineName
String

在其上查看的计算机的名称,对于本地计算机则为“.”。

返回

如果事件源已在给定计算机上注册,则为 true;否则为 false

例外

machineName 是无效的计算机名称。

未找到 source,无法搜索部分或全部事件日志。

示例

以下示例在计算机上创建源MySource,并将一个条目写入事件日志 MyNewLogMyServer

#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

注解

使用此方法可确定由 参数指定的 machineName 计算机上是否存在事件源。 如果要确定指定计算机上是否存在日志,请使用 Exists

由于此方法访问注册表,因此必须在给定服务器上具有相应的注册表权限;否则, SecurityException 将引发 。

注意

若要在 Windows Vista 及更高版本或 Windows Server 2003 中搜索事件源,必须具有管理权限。

此要求的原因是必须搜索所有事件日志(包括安全性),以确定事件源是否唯一。 从 Windows Vista 开始,用户无权访问安全日志;因此, SecurityException 会引发 。

从 Windows Vista 开始,用户帐户控制 (UAC) 确定用户的权限。 如果您是内置的 Administrators 组的成员,将为您分配两个运行时访问令牌:一个标准用户访问令牌和一个管理员访问令牌。 默认情况下,您拥有标准用户角色。 若要执行访问性能计数器的代码,必须先将权限从标准用户提升为管理员。 你可以通过以下方式执行此操作:右键单击应用程序图标并指示需以管理员身份运行。

注意

在帐户下 LocalSystem 执行的服务没有执行此方法所需的权限。 解决方法是检查 事件源是否存在于 中ServiceInstaller,如果不存在,则在安装程序中创建源。

由于无法为新源指定同一计算机上的现有源的名称,因此请在尝试调用 CreateEventSource 之前使用此方法,以确保计算机上不存在具有 指定 source 名称的源。 sourcemachineName 参数不区分大小写。

SourceExists 是一个 static 方法,因此可以在类本身上调用它。 无需创建 的实例 EventLog 来调用 SourceExists

另请参阅

适用于