WMI Series 3:.NET 框架中的 WMI 命名空間

.NET 框架中的 WMI 命名空間<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

.NET框架中與WMI規範有關的命名空間有兩個,分別是System.ManagementSystem.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          暴露運行時數據,如性能特性。

 

下圖更好的說明了.NET應用程序的WMI規範化,並且給出了在Windows和基於Web的程序中怎樣訪問應用程序中的管理對象。

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-6-202015380.gif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章