Managed WMI Sınıfları Oluşturma
C# ile WMI kodu yazıyorsanız ManagementScope, ManagementObjectSearcher, ManagementObjectCollection ve tabiki ManagementObject sınıflarına sık sık başvurmuşsunuzdur; ama bu sınıflarla çalışmak her zaman kolay değildir, özellikle de fonksiyonlarını kullanıyorsanız. Aşağıdaki koda göz atın :
private void List(string alanAdi) {
string sorgu = String.Format("SELECT * FROM MicrosoftDNS_AType WHERE ContainerName = '{0}'", alanAdi);
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) {
//gelen nesne ile ilgili iş mantığı
}
}
Şimdi size iyi bir haberim var; .Net framework araçları arasında bulunan “Management Strongly Typed Class Generator” (Mgmtclassgen.exe) işlerinizi oldukça kolaylaştıracaktır. “<Program Files>\Microsoft Visual Studio 8\SDK\v2.0\Bin\” dizini altında bulabileceğiniz “mgmtclassgen.exe” uygulaması, parametrelerinde vereceğiniz WMI sınıfı üzerinde rahatlıkla işlem yapabileceğiniz managed kodları üretecektir.
Bu uygulamayı en basit aşağıdaki şekilde çalıştırabilirsiniz :
mgmtclassgen.exe Win32_Service
Bu komut size Win32_Service WMI sınıfı üzerinde çalışabilmek için ara bir managed sınıf üretecektir. İşte size daha detaylı bir başka örnek
mgmtclassgen Win32_Service /n root\cimv2 /l CS /p c:\servisler.cs
Bu örnekte Root\cimv2 isim uzayı altında bulunan Win32_Service sınıfı üzerinde işlem yapabileceğiniz sınıfı oluşturu ve çıktıyı “c:\servisler.cs” dosyasına yazar. Oluşturduğu sınıfın bulunacağı isim uzayı ise ROOT.CIMV2.Win32 olacaktır. Kullanabileceğiniz diğer parametreler ise :
| /L | Oluşturulacak olan kodun hangi dotnet dilinde olacağı. CS, VB, JS, VJ, MC seçeneklerinizden varsayılan olan CSharp (CS)’tir. |
| /M | Bağlanılacak olan makine adı, varsayılan değeriyerel makinedir. |
| /U | Kullanıcı Adı |
| /PW | Kullanıcı Şifresi |
mgmtclassgen uygulamasını yukarıda verdiğim örnek içerisindeki AType WMI sınıfı için kullanılacak olursak; aynı işi , oluşturulan managed kodu ile, aşağıdaki kadar basit şekilde yapabilirsiniz :
private void List(string alanAdi) {
foreach (AType atype in AType.GetInstances(String.Format("SELECT * FROM MicrosoftDNS_AType WHERE ContainerName = '{0}'", alanAdi))) {
//İş mantığı kodu buraya yazılacak
}
}