Hata Kodu Alma
Tüm uygulamalarda olduğu gibi WMI da Windows işletim sisteminden hata kodları alır.
Bir hata kodu aldığınızda aşağıdaki seçeneklere sahip olursunuz:
Olay günlüğüne bakın.
WMI, bir hatanın nedenini saptamaya yardımcı olmak için olay günlüklerini denetleen Olay Günlüğü hizmetine hata iletileri gönderir. Olay günlüklerine program aracılığıyla erişmek için Olay Günlüğü sağlayıcısının desteklediği sınıfları kullanabilirsiniz.
Hata kodunu normal şekilde alın.
WMI, C++ için COM hata kodlarını ve sağlayıcı hata bilgilerini sağladığında Err Nesnesi (VBScript)veya SWbemLastErrorgibi yerel hata nesnelerini almak için standart teknikleri destekler.
Daha fazla bilgi için bkz. Sınıf ve Örnek Bilgisi Manipülasyonu.
Bu konuda aşağıdaki bölümler ele alınmıştır:
- VBScript ile Hata İşleme
- Bir Hatayı C++ Kullanarak İşleme
VBScript ile Hata İşleme
WMI için Betik Oluşturma API'sini kullanarak WMI çağrısı bir hataya neden olursa, hata bilgilerine erişmek için aşağıdaki seçenekleriniz vardır:
- Betik dilinin yerel hata mekanizmalarını kullanın, örneğin VBScript'te hata işlemeyi desteklemek için Err Nesnesi (VBScript) kullanın.
- Hata raporu almak için bir SWbemLastError nesnesi oluşturun.
Aşağıdaki betik, yerel Err Nesnesi (VBScript)kullanımını göstermektedir. İşlem tanıtıcısı için yanlış bir değer verildiğinde bir hata oluşturulur.
On Error Resume Next
Set objProcess = GetObject( _
"winmgmts:root\cimv2:Win32_Process.Handle='one'")
Wscript.Echo Err.Number
Not
Err Nesnesi (VBScript)Açıklaması özelliği, WMI'ye "winmgmts:" takma adıyla bağlanırken boş olur. Ancak, SWbemLocatorkullanarak bağlanırsanız, açıklama görüntülenebilir.
Aşağıdaki tabloda Err Nesnesi (VBScript)özellikleri listeleniyor.
Mülk | İçerir |
---|---|
Açıklama |
Hatanın yerelleştirilmiş, insan tarafından okunabilen açıklaması. |
Numarası |
HRESULT, WMI için Betik API'si tarafından döndürülen bir değerdir. |
Kaynak |
Hatayı oluşturan nesneyi tanımlar. |
Aşağıdaki betik, ayrıntılı hata bilgilerini almak için SWbemLastError nesnesinin kullanımını gösterir. Tüm sağlayıcıların SWbemLastErrorbilgilerini sağlamadığını unutmayın. Betikteki hata kodları hakkında daha fazla bilgi için bkz. WbemErrorEnum.
On Error Resume Next
Set obj = GetObject("winmgmts:root\cimv2:Win32_Process.Handle='one'")
Set LastError = createobject("wbemscripting.swbemlasterror")
Wscript.Echo "Operation = " & LastError.operation & VBCRLF & "ParameterInfo = " _
& LastError.ParameterInfo & VBCRLF & "ProviderName = " & LastError.ProviderName
C++ Kullanarak Hata İşleme
WMI istemci uygulaması COM'a özgü veya WMI'ya özgü hatalar alabilir. COM hataları, COM hata kodlarının yapısına uygundur. IWbemContext , IWbemClassObjectve IWbemQualifierSet arabirimleri dışında tüm WMI arabirimleri COM'a özgü bir hata döndürebilir. COM hata kodları hakkında daha fazla bilgi için bkz. Hata İşleme. WMI arabirimlerinin başvuru sayfaları, Hata Kodları bölümünde uygun WMI hata kodlarını listeler.
İstemci uygulaması, durum ve hata dönüş kodlarını denetlemek için COM standartlarına uygun olmalıdır. Seçmeniz gereken temel fark, hata kodunu zaman uyumlu, yarı zaman uyumsuz veya zaman uyumsuz bir çağrıdan almak isteyip istemediğinizdir.
C++ kullanarak zaman uyumlu ve yarı zaman uyumlu hata iletilerine erişmek için
GetErrorInfo COM işlevine yapılan çağrıyla hata bilgilerini alın.
Bir arabirim yöntemi hata gösterdiğinde hemen GetErrorInfo çağırdığından emin olun. Bu, yarı zaman uyumsuz bir işlemi işlerken çağırdığınız IWbemCallResult yöntemlerinden herhangi birini içerir.
IErrorInterface::QueryInterface yöntemine yapılan çağrıyla döndürülen COM hata nesnesini inceleyin.
QueryInterface çağrısında riid parametresi için IID_WbemClassObject belirttiğinizden emin olun. QueryInterface yöntemi, genellikle __ExtendedStatusbir WMI sınıfının örneğini döndürür.
Zaman uyumsuz çağrının ne zaman veya hangi iş parçacığında gerçekleştiğini öğrenmenin bir yolu olmadığından WMI, zaman uyumsuz bir çağrı için GetErrorInfo aracılığıyla hata nesnesini teslim etmez. Bu nedenle kodunuz yalnızca belirli hataları işleyebilir veya çağrı hatasını COM üzerinden geçirebilir.
Nota
Hedefe geri çağırma, istemcinin gerektirdiği kimlik doğrulama düzeyinde döndürülemeyebileceğinden, eş zamansız iletişim yerine yarı eş zamanlı kullanmanız önerilir. Daha fazla bilgi için Bir Yöntemi Çağırmabölümüne bakın.
C++ kullanarak zaman uyumsuz hata iletilerine erişmek için
IWbemObjectSink::SetStatusuygulamanızdan COM hata nesnesini alın.
Aşağıdaki sahte kod, istemci uygulaması için tipik bir hata işleme uygulamasını gösterir.
HRESULT hRes = SomeMethod; // Check for specific error and status codes. if (hRes == WBEM_E_NOT_FOUND) { // Processing to handle specific error code } else if hRes == WBEM_S_DUPLICATE_OBJECTS { // All other cases, including errors specific to COM } else if (FAILED(hRes)) { }