公開管理事件
若要將應用程式變成可管理的應用程式,開發人員可以辨認應用程式中適合引發管理事件的特定情況,來告知消費者應用程式中所發生的情況 (例如錯誤條件、狀態變更等等)。
System.Management.Instrumentation 命名空間提供一些類別來公開管理事件。若要公開事件:
- 使用 InstrumentationClass(InstrumentationType.Event) 屬性來標記類別,以將之辨識為管理事件。
- 從 BaseEvent 類別來衍生類別 (而非使用屬性) 以將之辨識為管理事件 (這個方法在效能上也會更有效率)。
若要引發事件,您可以建立事件類別的執行個體、填入屬性值和使用輔助器 Instrumentation.Fire() 或 BaseEvent::Fire() 方法 (視您用來宣告事件的方法而定)。
下列程式碼範例展示如何從 BaseEvent 類別衍生來建立管理事件,以及如何從 Managed 程式碼來引發管理事件。
using System;
using System.Management;
using System.Configuration.Install;
using System.Management.Instrumentation;
// This example demonstrates how to create a management event class by deriving
// from the BaseEvent class and to raise a management event from managed code.
// Specify which namespace the management event class is created in
[assembly:Instrumented("Root/Default")]
// Let the system know you will run InstallUtil.exe utility against
// this assembly
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}
// Create a management instrumentation event class
public class MyEvent : System.Management.Instrumentation.BaseEvent {
public string Event_Name;
}
public class Sample_EventProvider {
public static int Main(string[] args) {
MyEvent e = new MyEvent();
e.Event_Name = "Hello";
// Raise a management event
Instrumentation.Fire(e);
return 0;
}
}
下列程式碼展示如何使用 InstrumentationClass 屬性來建立管理事件類別,以及如何從 Managed 程式碼引發管理事件。
using System;
using System.Management;
using System.Configuration.Install;
using System.Management.Instrumentation;
// This example demonstrates how to create a management event class by using
// the InstrumentationClass attribute and to raise a management event from
// managed code.
// Specify which namespace the management event class is created in
[assembly:Instrumented("Root/Default")]
// Let the system know you will run InstallUtil.exe utility against
// this assembly
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}
// Create a management instrumentation event class
[InstrumentationClass(InstrumentationType.Event)]
public class MyEvent {
public string Event_Name;
}
public class WMI_InstrumentedEvent_Example {
public static void Main() {
MyEvent e = new MyEvent();
e.Event_Name = "Hello";
// Raise a management event
Instrumentation.Fire(e);
return;
}
}
請參閱
使用 System.Management 副稽核 .NET Framework 應用程式 | CLI 和 WMI 中的類別和對應 | 公開管理資料 | 繼承 | 註冊副稽核應用程式的結構描述