隨時接收事件
您可能想要撰寫應用程式,以隨時回應事件。 例如,當網路伺服器上的特定效能指標下降時,系統管理員可能會想要收到電子郵件訊息。 在此情況下,您的應用程式應該隨時執行。 不過,持續執行應用程式並不是有效率地使用系統資源。 相反地,WMI 可讓您建立永久事件取用者。 永久事件使用者必須符合特殊安全性需求。 如需詳細資訊,請參閱 保護 WMI 事件。
永久的事件消費者會接收事件,直到其註冊被明確取消為止。
常駐事件使用者是在您系統上的下列 WMI 類別、篩選器和 COM 物件的組合:
- 一個 COM 物件稱為實體消費者。 WMI 提供數個標準的永久使用者。 例如,當事件發生 時,Active Script 事件取用者執行腳本。
- 新的永久性消費者群體。
- 永久消費者類別的一個實例,稱為邏輯消費者。
- 包含事件查詢的篩選器。
- 消費者與過濾器之間的連結。
邏輯事件取用者的屬性會指定要在通知事件時執行的動作,但不會定義與其相關聯的事件查詢。 發出訊號時,WMI 會自動將代表永久事件取用者的 COM 物件載入使用中記憶體。 通常,這種情況會發生在啟動過程中或響應觸發事件時。 啟動之後,永久事件取用者會運作如同一般事件取用者,但會持續存在直到被作業系統特別卸除。
您可以撰寫自己的永久事件取用者,或使用 WMI 預安裝 標準取用者類別,例如 ActiveScriptEventConsumer。 如需詳細資訊,請參閱 標準消費者類別、標準消費者監視和回應事件,以及 監視事件。
下列程序說明如何建立您自己的永久事件取用者。
建立您自己的永久事件處理器
判斷您想要接收的事件種類。
WMI 支援固有和外部事件。 內部事件是由 WMI 預先定義的事件,而外部事件是由第三方提供者所定義的事件。 如需詳細資訊,請參閱 判斷要接收的事件類型。
-
管理應用程式與 實體取用者 的主要差異在於使用者載入和卸除管理應用程式,而 WMI 會載入和卸除實體取用者。 您的大部分程式代碼應該位於實體取用者中。
注意
這個步驟是程式中的第一個步驟,可簡化說明。 在程式代碼撰寫方面,您應該實際建立實體取用者。 如此一來,您就可以為永久事件提供者配置參數和邏輯,再開始冗長的編碼。 不過,對優先撰寫實體消費者沒有任何限制。
建立描述實體消費者的新消費者類別。
就像任何類別一樣,消費者類別會向WMI描述永久事件消費者的一般參數。
-
如同任何其他 WMI 類別,如果您想要實作 類別,您必須建立取用者類別的實例。 消費者類別的實例也稱為 邏輯消費者。 邏輯用戶代表 WMI 的實體用戶。
-
啟動永久事件取用者的事件查詢稱為 事件篩選。 單一事件篩選可以與多個邏輯事件取用者相關聯。 此外,多個事件篩選條件可以與單一邏輯事件消費者相關聯。 篩選條件是 __EventFilter實例。
當永久事件消費者的查詢失敗時,會產生NT日誌事件。 事件的來源為 WinMgmt、事件標識碼為 10,而事件類型為 Error。
-
藉由將事件篩選連結至邏輯取用者,您可以指示 WMI 了解哪個事件篩選條件屬於哪個邏輯取用者。 邏輯事件消費者和事件篩選器透過 __FilterToConsumerBinding的關聯類別實例連結。 收到符合事件篩選中所述事件查詢的事件時,WMI 會藉由查看關聯類別實例來尋找相關聯的邏輯事件取用者。 找到邏輯事件取用者實例之後,WMI 會使用 __EventConsumerProviderRegistration 類別的實例來尋找並執行與此實例相關聯的實體事件取用者。
-
事件消費者提供者是一個 COM 物件,可找出 WMI 的實體消費者。