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 } }