EventLogInstaller 类
使您能够安装和配置应用程序在运行时所读取或写入的事件日志。
**命名空间:**System.Diagnostics
**程序集:**System.Configuration.Install(在 system.configuration.install.dll 中)
语法
声明
Public Class EventLogInstaller
Inherits ComponentInstaller
用法
Dim instance As EventLogInstaller
public class EventLogInstaller : ComponentInstaller
public ref class EventLogInstaller : public ComponentInstaller
public class EventLogInstaller extends ComponentInstaller
public class EventLogInstaller extends ComponentInstaller
备注
EventLogInstaller 由 安装程序工具 (Installutil.exe) 在安装事件日志时使用。EventLogInstaller 类只能在本地计算机上安装事件日志。
应用程序写入事件日志时使用 EventLogInstaller 类;应用程序要读取事件日志中的内容,不一定要使用事件日志安装程序。应用程序和服务应写入 Application 日志或自定义日志。设备驱动程序应写入 System 日志。
提示
Security 日志是只读的。
安装程序创建您在 Source 属性中指定的事件源,并为 Log 属性中指定的事件日志注册该事件源。此行为类似于对 EventLog 组件调用 CreateEventSource。
使用 WriteEvent 和 WriteEntry 方法可以向事件日志中写入事件。若要写入事件,必须指定一个事件源;在事件源中写入第一项之前,必须先创建并配置事件源。
在安装应用程序的过程中创建新的事件源。这样操作系统就有时间刷新自己的已注册事件源的列表以及这些事件源的配置。如果操作系统尚未刷新自己的事件源列表,而您试图在新源中写入事件,则写操作将会失败。您可以使用 EventLogInstaller 或者使用 CreateEventSource 方法配置新的源。若要创建新的事件源,您必须拥有计算机的管理员权限。
可以为现有事件日志或新的事件日志创建事件源。在为新的事件日志创建新源时,系统会为该日志注册源,但直到写入第一条日志时才会创建该日志。
若要安装事件日志,请创建一个从 Installer 继承的项目安装程序类,并将该类的 RunInstallerAttribute 设置为 true。在项目中,为应用程序将写入的每一个事件日志创建一个 EventLogInstaller,并将该实例添加到项目安装程序类中。
调用 安装程序工具 (Installutil.exe) 时,它将查看 RunInstallerAttribute。如果该属性为 true,此工具将安装 Installers 集合中与项目安装程序关联的所有项。如果 RunInstallerAttribute 为 false,此工具将忽略项目安装程序。
若要修改 EventLogInstaller 的其他属性,可以在将该实例添加到项目安装程序的 Installers 集合之前或之后(但必须在安装程序工具运行之前)执行。如果您的应用程序将写入事件日志,则必须设置 Source 属性。
使用 EventLogInstaller 为新的或现有的事件日志注册一个新的源;不要使用 EventLogInstaller 更改现有的源。EventLogInstaller 类不会为了与指定的安装属性匹配而修改现有源的配置属性。如果 Source 属性与某个源名称匹配,而该源名称是为计算机上的另一个事件日志注册的,则 Install 方法会引发异常。如果 Source 属性与某个源名称匹配,而该源名称已经为 Log 属性中指定的同一事件日志注册,则 Install 方法将不会注册对应的源。
可以使用事件类别和消息字符串的本地化资源文件来注册事件源。您的应用程序可使用资源标识符而不是通过指定实际字符串来写入事件日志项。事件查看器使用资源标识符,根据当前的语言设置从本地化资源文件中查找对应的字符串,并将其显示出来。您可以为事件类别、消息和参数插入字符串注册单独的文件,或者,也可以为所有这三种类型的字符串注册同一个资源文件。使用 CategoryCount、CategoryResourceFile、MessageResourceFile 和 ParameterResourceFile 属性配置源以将本地化项写入事件日志。如果您的应用程序直接将字符串值写入事件日志,则不需要设置这些属性。
无论要写入本地化后的项还是要直接写入字符串,都必须配置源。如果应用程序写入项时既使用资源标识符也使用字符串值,则必须注册两个不同的源。例如,用资源文件配置一个源,然后在 WriteEvent 方法中使用该源,将使用资源标识符的项写入到事件日志。在不使用资源文件的情况下另外创建一个源,然后在 WriteEntry 方法中使用该源将字符串直接写入到使用该源的事件日志。
通常不在代码中调用 EventLogInstaller 类的方法,这些方法一般仅由安装程序工具 Installutil.exe 调用。该工具在安装过程中自动调用 Install 方法。它在必要时对生成异常的对象调用 Rollback 以退出故障。
Windows 98, Windows Millennium Edition 平台说明: Windows 98/Windows Millennium Edition (Me) 不支持事件日志。
示例
下面的代码示例为一个新的事件源设置安装属性。此代码示例设置源名称和事件日志名称,并将 EventLogInstaller 添加到 Installers 集合中。
Imports System
Imports System.Configuration.Install
Imports System.Diagnostics
Imports System.ComponentModel
<RunInstaller(True)> _
Public Class MyEventLogInstaller
Inherits Installer
Private myEventLogInstaller As EventLogInstaller
Public Sub New()
' Create an instance of an EventLogInstaller.
myEventLogInstaller = New EventLogInstaller()
' Set the source name of the event log.
myEventLogInstaller.Source = "NewLogSource"
' Set the event log that the source writes entries to.
myEventLogInstaller.Log = "MyNewLog"
' Add myEventLogInstaller to the Installer collection.
Installers.Add(myEventLogInstaller)
End Sub 'New
Public Shared Sub Main()
End Sub 'Main
End Class 'MyEventLogInstaller
using System;
using System.Configuration.Install;
using System.Diagnostics;
using System.ComponentModel;
[RunInstaller(true)]
public class MyEventLogInstaller: Installer
{
private EventLogInstaller myEventLogInstaller;
public MyEventLogInstaller()
{
// Create an instance of an EventLogInstaller.
myEventLogInstaller = new EventLogInstaller();
// Set the source name of the event log.
myEventLogInstaller.Source = "NewLogSource";
// Set the event log that the source writes entries to.
myEventLogInstaller.Log = "MyNewLog";
// Add myEventLogInstaller to the Installer collection.
Installers.Add(myEventLogInstaller);
}
public static void Main()
{
}
}
#using <System.dll>
#using <System.Configuration.Install.dll>
using namespace System;
using namespace System::Configuration::Install;
using namespace System::Diagnostics;
using namespace System::ComponentModel;
[RunInstaller(true)]
ref class MyEventLogInstaller: public Installer
{
private:
EventLogInstaller^ myEventLogInstaller;
public:
MyEventLogInstaller()
{
// Create an instance of an EventLogInstaller.
myEventLogInstaller = gcnew EventLogInstaller;
// Set the source name of the event log.
myEventLogInstaller->Source = "NewLogSource";
// Set the event log that the source writes entries to.
myEventLogInstaller->Log = "MyNewLog";
// Add myEventLogInstaller to the Installer collection.
Installers->Add( myEventLogInstaller );
}
};
import System.*;
import System.Configuration.Install.*;
import System.Diagnostics.*;
import System.ComponentModel.*;
/** @attribute RunInstaller(true)
*/
public class MyEventLogInstaller extends Installer
{
private EventLogInstaller myEventLogInstaller;
public MyEventLogInstaller()
{
// Create an instance of an EventLogInstaller.
myEventLogInstaller = new EventLogInstaller();
// Set the source name of the event log.
myEventLogInstaller.set_Source("NewLogSource");
// Set the event log that the source writes entries to.
myEventLogInstaller.set_Log("MyNewLog");
// Add myEventLogInstaller to the Installer collection.
this.get_Installers().Add(myEventLogInstaller);
} //MyEventLogInstaller
public static void main(String[] args)
{
} //main
} //MyEventLogInstaller
继承层次结构
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Configuration.Install.Installer
System.Configuration.Install.ComponentInstaller
System.Diagnostics.EventLogInstaller
线程安全
此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
平台
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 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
请参见
参考
EventLogInstaller 成员
System.Diagnostics 命名空间
EventLog 类
CreateEventSource