隨時接收事件

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

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

永久事件取用者是位於系統上的下列 WMI 類別、篩選和 COM 物件的組合:

  • 稱為實體取用者的 COM 物件。 WMI 提供數個標準永久取用者。 例如,使用中腳本事件取用者會在 事件發生時執行腳本
  • 新的永久取用者類別。
  • 永久取用者類別的實例,稱為邏輯取用者。
  • 包含事件查詢的篩選。
  • 取用者與篩選之間的連結。

邏輯事件取用者的屬性會指定要在收到事件通知時執行的動作,但不會定義與其相關聯的事件查詢。 收到訊號時,WMI 會自動將代表永久事件取用者的 COM 物件載入使用中記憶體。 一般而言,這會在啟動期間發生,或回應觸發事件。 啟動之後,永久事件取用者會作為一般事件取用者,但會維持在作業系統特別卸載之前。

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

下列程式描述如何建立您自己的永久事件取用者。

建立您自己的永久事件取用者

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

    WMI 支援內建和外來事件。 內部事件是由 WMI 預先定義的事件,而 extrinsic 事件則是協力廠商提供者所定義的事件。 如需詳細資訊,請參閱 決定要接收的事件種類

  2. 實作實體取用者

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

    注意

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

     

  3. 建立描述實體取用者的新取用者類別

    就像任何類別一樣,取用者類別會將永久事件取用者的一般參數描述為 WMI。

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

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

  5. 建立事件篩選

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

    當永久事件取用者的查詢失敗時,會產生 NT 記錄事件。 事件的來源為 WinMgmt、事件識別碼為 10,而事件種類為 Error。

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

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

  7. 撰寫事件取用者提供者

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