Generating Managed WMI Classes

  If you are also writing code using WMI on C#, probably you’ve also use the following classes; ManagementScope, ManagementObjectSearcher, ManagementObjectCollection and also ManagementObject; But they’re not such easy classes to deal with, espacially if you’re using WMI methods. Take a look at this code:

private void List(string containerName) {
string sorgu = String.Format("SELECT * FROM MicrosoftDNS_AType WHERE ContainerName = '{0}'", containerName);
ManagementScope managementScope = new ManagementScope(new ManagementPath(@"\\.\root\MicrosoftDNS"));
managementScope.Connect();

ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher(managementScope, new ObjectQuery(sQuery));
ManagementObjectCollection objectCollection = objectSearcher.Get();

foreach (ManagementObject managementObject in objectCollection) {
//Business logic goes here
}
}

   Here is the good news; “Management Strongly Typed Class Generator” (Mgmtclassgen.exe) application, placed in .Net framework tools makes it easier. “mgmtclassgen.exe” tool, placed under “\Microsoft Visual Studio 8\SDK\v2.0\Bin\” folder, generates managed classes to deal with WMI classes.

   Here is one of the simplest usage of the tool :

mgmtclassgen.exe Win32_Service

It will generate a managed class for the Win32_Service WMI class. Here is another sample :

mgmtclassgen Win32_Service /n root\cimv2 /l CS /p c:\servisler.cs

In this sample, tool will generate a managed class for the Win32_Service WMI class placed under Root\cimv2 namespace and gives its output to “c:\servisler.cs”. Also output class will be placed under ROOT.CIMV2.Win32 namespace. Here is other parameters that can be used:

/L Generated Language. Followings cand be used, default is CSharp (CS) : CS, VB, JS, VJ, MC.
/M Remote computer to connect.Default is local machine.
/U Username
/PW Password

   Here is the code that makes the same thing with the code in first example. But this one uses the managed C# class called AType that generated by mgmtclassgen for AType WMI class :

private void List(string containerName) {
foreach (AType atype in AType.GetInstances(String.Format("SELECT * FROM MicrosoftDNS_AType WHERE ContainerName = '{0}'", containerName))) {
//Business logic goes here
}
}

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir