.NET框架中與WMI規范有關的命名空間有兩個,分別是System.Management和System.Management.Instrumentation兩個命名空間。其中System.Managemen命名空間提供的類對象為訪問各種管理對象提供了面向對象的編程接口,而System.Management.Instrumentation命名空間提供的類用來設置用戶自定義的應用程序,使得這些應用程序對象能夠符合WMI的規范,從而通過WMI向使用該應用程序的管理者公開其提供的管理信息和事件,這些使用者有可能是Microsoft Application Center 或 Microsoft Operations Manager這樣的,也有可能是自定義編寫的高端管理應用程序(您可以通過System.Management命名空間提供的類對象來編寫自己的管理應用程序)。因此,如果您想使自己的產品的管理可以在這些管理工具,您就得使您自己的應用程序符合WMI的規范,而針對.NET平台上的應用程序WMI規范編寫來說,使用的是System.Management.Instrumentation命名空間提供的類。
System.Management 命名空間
System.Management 命名空間是 .NET Framework 中的 WMI 命名空間。此命名空間包括以下重要的類對象:
ManagementClass:管理類,它的構造函數輸入參數為WMI類名稱,標識管理對象,例如:
diskman = new ManagementClass("Win32_LogicalDisk");
diskman為Win32平台下的整個邏輯磁盤的管理對象。
ManagementObjectCollection:ManagementObject管理對象的集合。
ManagementObject和:ManagementObject為具體的數據管理對象,對於上面的例子而言,可以對應邏輯磁盤的C分區管理對象。看下面的代碼:
*****************************************************
ManagementObjectCollection disks = diskman.GetInstances();
foreach (ManagementObject disk in disks)
{
Console.WriteLine("Disk = {0}" , disk["Name"].ToString());
Console.WriteLine("Disk = {0}" , disk["FileSystem"].ToString());
Console.WriteLine("Disk = {0}" , disk["Size"].ToString());
}
*****************************************************
disks為邏輯磁盤分區C,D,E…的集合,對於每一個邏輯分區,由一個disk對象管理其數據,並輸出名稱,文件系統和磁盤空間大小。
ManagementQuery:用作所有查詢類的基礎。在前面說過,對於管理對象,可以像在關系數據庫裡面使用SQL查詢語句一樣進行您感興趣的數據過濾查詢,如:
SELECT * FROM Win32_ LogicalDisk
ManagementQuery作為查詢的抽象基類,您可以繼承以實現其方法,SelectQuery即是。
ManagementObjectSearcher:用於根據指定的查詢或枚舉檢索管理對象的集合。
*****************************************************
SelectQuery selectQuery = new SelectQuery("win32_logicaldisk");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject disk in searcher.Get())
{
Console.WriteLine(disk.ToString());
}
****************************************************
以上代碼指定searcher的查詢為selectQuery,即Win32邏輯磁盤的集合查詢,然後將這些邏輯磁盤分區輸出。當然您也可以直接使用SQL查詢語句來實例化ManagementObjectSearcher對象,代碼如下:
ManagementObjectSearcher search=new ManagementObjectSearcher(“SELECT * FROM Win32_ LogicalDisk
”);
ManagementEventWatcher:用於預定WMI事件通知,這個在後面的章節中將詳細講述。
對於這個命名空間其他的類將在後面的實例講解中再做敘述。
System.Management.Instrumentation命名空間
從前面講述的內容,您應該知道如果想使得您自己的應用程序或產品能夠使用諸如Microsoft Application Center 或 Microsoft Operations Manager這樣的管理工具,您就應該將您的應用程序對象向支持WMI的工具公開信息。使用的將是System.Management.Instrumentation命名空間提供的類。
System.Management.Instrumentation命名空間可以使得您輕松的完成以下任務:
n 規范化應用程序;
n 將應用程序事件暴露為WMI事件;
n 創作管理對象;
n 定義和使用管理對象之間的關系。
規范應用程序的對象,使其符合WMI的規范,這樣的工作對於.NET程序員來說是直接簡單的。因為WMI的架構模式本來就是面向對象的,並且有很多的特性與.NET元數據是相通的。因此應用程序的對象可以直接映射為WMI對象,相同的,使應用程序代碼轉化為可管理的應用程序代碼將不會需要很大的代價。舉例來說您可以如此規范化.NET應用程序:
n 應用程序的組件可以發生事件。
n 提供可管理的對象使得應用程序可以配置。
n 暴露運行時數據,如性能特性