共用方式為


根據事件從命令列執行程式

CommandLineEventConsumer類別會在發生指定的事件時,從命令列執行指定的可執行程式。 這個類別是 WMI 提供的標準事件取用者。

當您使用 CommandLineEventConsumer時,應該保護您想要啟動的可執行檔。 如果可執行檔不在安全的位置,或未使用強式存取控制清單 (ACL) 保護,則沒有存取權限的使用者可以將可執行檔取代為不同的可執行檔。 您可以使用 Win32_LogicalFileSecuritySettingWin32_LogicalShareSecuritySetting 類別,以程式設計方式變更檔案或共用的安全性。 如需詳細資訊,請參閱 在 C++ 中建立新物件的安全性描述元

使用標準取用者的基本程式一律相同,且位於 使用標準取用者的監視和回應事件中。 下列程式會新增至基本程式,專屬於 CommandLineEventConsumer 類別,並說明如何建立執行程式的事件取用者。

警告

CommandLineEventConsumer類別具有特殊的安全性條件約束。 此標準取用者必須由本機電腦上的 Administrators 群組本機成員設定。 如果您使用網域帳戶來建立訂用帳戶,LocalSystem 帳戶必須具有網域的必要許可權,以確認建立者是本機 Administrators 群組的成員。

CommandLineEventConsumer 無法用來啟動以互動方式執行的進程。

 

下列程式描述如何建立從命令列執行進程的事件取用者。

若要建立從命令列執行進程的事件取用者

  1. 在 Managed 物件格式 (MOF) 檔案中,建立 CommandLineEventConsumer 的實例,以接收您在查詢中要求的事件。 如需詳細資訊,請參閱 設計 Managed 物件格式 (MOF) 類別
  2. 建立 __EventFilter 的實例,並為其命名。
  3. 建立查詢以指定事件的類型。 如需詳細資訊,請參閱 使用 WQL 查詢
  4. 建立 __FilterToConsumerBinding 實例,以將篩選準則與 CommandLineEventConsumer實例產生關聯。
  5. 使用 Mofcomp.exe編譯 MOF 檔案。

範例

下列程式碼範例會建立名為 「MyCmdLineConsumer」 的新類別,以在 MOF 結尾建立新類別的實例時產生事件。 此範例位於 MOF 程式碼中,但您可以使用 適用于 WMI 的腳本 APIWMI 的 COM API,以程式設計方式建立實例。

下列程式描述如何建立名為 MyCmdLineConsumer 的新類別。

建立名為 MyCmdLineConsumer 的新類別

  1. 使用執行可見程式的命令建立c:\cmdline_test.bat檔案,例如 「calc.exe」。
  2. 將 MOF 複製到文字檔,並以 .mof 副檔名儲存。
  3. 在 [命令] 視窗中,使用下列命令編譯 MOF 檔案: Mofcomp filename.mof

注意

cmdline_test.bat中指定的程式應該執行。

 

// Set the namespace as root\subscription.
// The CommandLineEventConsumer is already compiled
// in the root\subscription namespace. 
#pragma namespace ("\\\\.\\Root\\subscription")

class MyCmdLineConsumer
{
 [key]string Name;
};

// Create an instance of the command line consumer
// and give it the alias $CMDLINECONSUMER

instance of CommandLineEventConsumer as $CMDLINECONSUMER
{
 Name = "CmdLineConsumer_Example";
 CommandLineTemplate = "c:\\cmdline_test.bat";
 RunInteractively = True;
 WorkingDirectory = "c:\\";
};    

// Create an instance of the event filter
// and give it the alias $CMDLINEFILTER
// The filter queries for instance creation event
// for instances of the MyCmdLineConsumer class

instance of __EventFilter as $CMDLINEFILTER
{
    Name = "CmdLineFilter";
    Query = "SELECT * FROM __InstanceCreationEvent"
        " WHERE TargetInstance.__class = \"MyCmdLineConsumer\"";
    QueryLanguage = "WQL";
};

// Create an instance of the binding
// between filter and consumer instances.

instance of __FilterToConsumerBinding
{
     Consumer = $CMDLINECONSUMER;
     Filter = $CMDLINEFILTER;
};

// Create an instance of this class right now. 
// The commands in c:\\cmdline_test.bat execute
// as the result of creating the instance
// of MyCmdLineConsumer.
 
instance of MyCmdLineConsumer
{
     Name = "CmdLineEventConsumer test";
};

使用標準取用者監視和回應事件