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