規範化自己的應用程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
前面我們學習了利用System.Management 命名空間提供的類來管理各種各樣的管理對象,在接下來的這一節,我們將一起學習規範自己的應用程序,使其符合WMI的規範,而使得諸如Microsoft Application Center 或 Microsoft Operations Manager這樣的管理工具能夠管理我們的應用程序。這一部分將使用到System.Management.Instrumentation 命名空間提供的類對象來規範化應用程序。
規範化應用程序的方法
爲了使得我們自己編寫的應用程序或者最終發佈的應用程序產品符合WMI的規範,而利用管理工具或者編程客戶端可以管理這些應用程序中的對象,就得使這些可管理的對象對WMI公開,使得在安裝和運行應用程序後,註冊到WMI儲存庫。公開管理對象的有以下兩種方式,公開管理事件和公開數據。
公開管理事件。關於事件的定義和作用在前面的章節已有講述,爲使應用程序成爲可管理的,程序員可以在應用程序中設定一些條件,當這些條件得到滿足時將觸發一個管理事件,然後通知事件的訂閱者應用程序中發生的事情,這些事件是各種各樣的,既可以是磁盤空間不足,也可以是我們自己應用程序中的某些重要數據被修改。
System.Management.Instrumentation 命名空間提供了兩種用於公開管理事件的類:
n InstrumentationClass(InstrumentationType.Event) 屬性標記類以將其標識爲管理事件;
n BaseEvent:從這個類派生的類以將其標識爲管理事件而不是使用屬性,推薦使用這種方法,性能較好。
設定好事件類之後,要引發事件需要調用Instrumentation.Fire()方法。
公開管理數據。通常的管理來說,不僅是需要事件觸發和通知,同時管理客戶端可能還需要訪問管理對象的某些數據乃至方法,因此公開管理數據對於WMI規範化應用程序來說幾乎是不可少的。 System.Management.Instrumentation命名空間同樣也是提供了兩種方法來需要公開數據的類:
n 使用InstrumentationClass(InstrumentationType.Instance) 屬性來標記公開數據的類;
n 將公開數據的類從Instance 類派生。
通過上述的方法規範化應用程序,最主要的工作就已經完成了,剩下的事情就是爲這個已經規範化的應用程序架構註冊到WMI儲存庫。發佈應用的架構,對於WMI規範化的應用程序來說,是必不可少的一步。所幸的是.NET框架爲我們開發人員提供了標準的程序安裝機制,可以輕鬆的完成架構發佈。
我們所要做的工作就是爲應用程序定製安裝項目,安裝項目默認的調用程序中的自定義安裝程序來完成架構的發佈。這要使用到System.Management.Instrumentation 中提供的默認管理安裝程序幫助器類,您只需要從其派生,不需要重寫任何實現:
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}
開發的實例
下面我將給出一個具體的應用程序開發實例,展示了上面所講到的公開數據和公開事件的方法,並給出了管理客戶端調用的代碼,當然您也可以在服務器資源管理器中的WMI事件和WMI類中看到發佈的WMI類和查詢管理事件。
*****************************************************
//應用程序發佈
using System;
using System.Management.Instrumentation;
using System.Configuration.Install;
using System.Collections;
// 指定應用程序發佈的WMI命名空間
[assembly:Instrumented("Root/Default")]
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}
namespace InstrumentationMyApp
{
[InstrumentationClass(InstrumentationType.Event)]
public class EventClass
{
public EventClass(int eventflag)
{
EventFlag = eventflag;
Instrumentation.Fire(this);
}
public int EventFlag;
static void Main(string[] args)
{
int eventflag=100;
EventClass myBabyEvt = new EventClass(eventflag);
Console.WriteLine("EventClass事件觸發");
UniqueClass myclass=new UniqueClass();
myclass.Name="Unique";
myclass.Description="this is unique";
Instrumentation.Publish(myclass);
Console.WriteLine("已經發布數據類");
Console.ReadLine();
//取消發佈
Instrumentation.Revoke(myclass);
}
}
[InstrumentationClass(InstrumentationType.Instance)]
public class UniqueClass
{
public string Name;
public string Description;
//由於集合類不能使用發佈,故使用忽略屬性
[IgnoreMember]
public System.Collections.ArrayList EmployeeList;
}
}
*****************************************************
新建一個空白C#項目,輸入上述代碼,即完成了應用程序,要發佈應用程序並且測試結果,還需要製作安裝程序。按照下列步驟操作即可:
1) 添加項目->新建項目,選擇安裝項目,輸入項目名;
2) 切換到文件系統視圖,在應用程序文件夾下右鍵添加輸出;
3) 在輸出對話框中選擇主輸出;
4) 編譯安裝項目;
經過以上步驟,您就可以安裝您的程序了。運行應用程序,展開服務器資源管理器的Management Class,並添加類,在root/default命名空間下找到UniqueClass,點擊Ok,即添加了類。按照第5節的內容您也可以查詢剛纔安裝併發布的應用程序產生的事件。有關管理客戶端調用的代碼,您可以在本書的附錄中找到。