共用方式為


隨時接收事件

您可能想要撰寫應用程式,以隨時回應事件。 例如,當網路伺服器上的特定效能指標下降時,系統管理員可能會想要收到電子郵件訊息。 在此情況下,您的應用程式應該隨時執行。 不過,持續執行應用程式並不是有效率地使用系統資源。 相反地,WMI 可讓您建立永久事件取用者。 永久事件使用者必須符合特殊安全性需求。 如需詳細資訊,請參閱 保護 WMI 事件

永久的事件消費者會接收事件,直到其註冊被明確取消為止。

常駐事件使用者是在您系統上的下列 WMI 類別、篩選器和 COM 物件的組合:

  • 一個 COM 物件稱為實體消費者。 WMI 提供數個標準的永久使用者。 例如,當事件發生 時,Active Script 事件取用者執行腳本。
  • 新的永久性消費者群體。
  • 永久消費者類別的一個實例,稱為邏輯消費者。
  • 包含事件查詢的篩選器。
  • 消費者與過濾器之間的連結。

邏輯事件取用者的屬性會指定要在通知事件時執行的動作,但不會定義與其相關聯的事件查詢。 發出訊號時,WMI 會自動將代表永久事件取用者的 COM 物件載入使用中記憶體。 通常,這種情況會發生在啟動過程中或響應觸發事件時。 啟動之後,永久事件取用者會運作如同一般事件取用者,但會持續存在直到被作業系統特別卸除。

您可以撰寫自己的永久事件取用者,或使用 WMI 預安裝 標準取用者類別,例如 ActiveScriptEventConsumer。 如需詳細資訊,請參閱 標準消費者類別標準消費者監視和回應事件,以及 監視事件

下列程序說明如何建立您自己的永久事件取用者。

建立您自己的永久事件處理器

  1. 判斷您想要接收的事件種類。

    WMI 支援固有和外部事件。 內部事件是由 WMI 預先定義的事件,而外部事件是由第三方提供者所定義的事件。 如需詳細資訊,請參閱 判斷要接收的事件類型

  2. 實施一個實體消費者

    管理應用程式與 實體取用者 的主要差異在於使用者載入和卸除管理應用程式,而 WMI 會載入和卸除實體取用者。 您的大部分程式代碼應該位於實體取用者中。

    注意

    這個步驟是程式中的第一個步驟,可簡化說明。 在程式代碼撰寫方面,您應該實際建立實體取用者。 如此一來,您就可以為永久事件提供者配置參數和邏輯,再開始冗長的編碼。 不過,對優先撰寫實體消費者沒有任何限制。

     

  3. 建立描述實體消費者的新消費者類別。

    就像任何類別一樣,消費者類別會向WMI描述永久事件消費者的一般參數。

  4. 建立取用者類別的實例。

    如同任何其他 WMI 類別,如果您想要實作 類別,您必須建立取用者類別的實例。 消費者類別的實例也稱為 邏輯消費者。 邏輯用戶代表 WMI 的實體用戶。

  5. 建立事件篩選。

    啟動永久事件取用者的事件查詢稱為 事件篩選。 單一事件篩選可以與多個邏輯事件取用者相關聯。 此外,多個事件篩選條件可以與單一邏輯事件消費者相關聯。 篩選條件是 __EventFilter實例。

    當永久事件消費者的查詢失敗時,會產生NT日誌事件。 事件的來源為 WinMgmt、事件標識碼為 10,而事件類型為 Error。

  6. 將事件篩選連結至邏輯取用者

    藉由將事件篩選連結至邏輯取用者,您可以指示 WMI 了解哪個事件篩選條件屬於哪個邏輯取用者。 邏輯事件消費者和事件篩選器透過 __FilterToConsumerBinding的關聯類別實例連結。 收到符合事件篩選中所述事件查詢的事件時,WMI 會藉由查看關聯類別實例來尋找相關聯的邏輯事件取用者。 找到邏輯事件取用者實例之後,WMI 會使用 __EventConsumerProviderRegistration 類別的實例來尋找並執行與此實例相關聯的實體事件取用者。

  7. 撰寫事件消費者提供者

    事件消費者提供者是一個 COM 物件,可找出 WMI 的實體消費者。