CommandLineEventConsumer 類別
CommandLineEventConsumer類別會在將事件傳遞給本機系統時,啟動本機系統中的任意進程。 這個類別是 WMI 所提供的其中一個標準事件取用者。 如需詳細資訊,請參閱 使用標準取用者監視和回應事件。
注意
使用 CommandLineEventConsumer 類別時,請保護您要啟動的可執行檔。 如果可執行檔不在安全的位置,或是使用強式存取控制清單保護, (ACL) ,未經授權的使用者可以將可執行檔取代為惡意可執行檔。 如需 ACL 的詳細資訊,請流覽 Microsoft Windows 軟體發展工具組 (SDK) 的安全性一節,請參閱 建立新物件的安全性描述元。
語法
[AMENDMENT]
class CommandLineEventConsumer : __EventConsumer
{
uint8 CreatorSID[];
string MachineName;
uint32 MaximumQueueSize;
string CommandLineTemplate;
boolean CreateNewConsole = False;
boolean CreateNewProcessGroup = True;
boolean CreateSeparateWowVdm = False;
boolean CreateSharedWowVdm = False;
string DesktopName;
string ExecutablePath;
uint32 FillAttributes;
boolean ForceOffFeedback = False;
boolean ForceOnFeedback = False;
uint32 KillTimeout = 0;
string Name;
sint32 Priority = 0x20;
boolean RunInteractively = False;
uint32 ShowWindowCommand;
boolean UseDefaultErrorMode = False;
string WindowTitle;
string WorkingDirectory;
uint32 XCoordinate;
uint32 XNumCharacters;
uint32 XSize;
uint32 YCoordinate;
uint32 YNumCharacters;
uint32 YSize;
uint32 FillAttribute;
};
成員
CommandLineEventConsumer類別具有下列類型的成員:
屬性
CommandLineEventConsumer類別具有這些屬性。
-
CommandLineTemplate
-
-
資料類型: 字串
-
存取類型:唯讀
標準字串範本,指定要啟動的程式。 這個屬性可以是 Null, 而 ExecutablePath 屬性會當做命令列使用。
-
-
CreateNewConsole
-
-
資料類型: 布林值
-
存取類型:唯讀
未使用。 如果將值指派給這個屬性,就會產生追蹤訊息。 如需詳細資訊,請參閱 追蹤 WMI 活動。
-
-
CreateNewProcessGroup
-
-
資料類型: 布林值
-
存取類型:唯讀
如果 為 True,則新進程是新進程群組的根進程。 進程群組包含此根進程子代的所有進程。 新進程群組的進程識別碼與這個進程識別碼相同。 GenerateConsoleCtrlEvent方法會使用進程群組,以啟用將 CTRL+C 或 CTRL+BREAK 訊號傳送至主控台進程的群組。
-
-
CreateSeparateWowVdm
-
-
資料類型: 布林值
-
存取類型:唯讀
如果 為 True,則新進程會在私人 Virtual DOS Machine (VDM) 中執行。 只有在啟動在 16 位 Windows 作業系統上執行的應用程式時,才有效。 如果設定為 False,在 16 位 Windows 作業系統上執行的所有應用程式都會以單一共用 VDM 中的執行緒身分執行。 如需詳細資訊,請參閱本主題的一節。
-
-
CreateSharedWowVdm
-
-
資料類型: 布林值
-
存取類型:唯讀
如果 為 True, CreateProcess 方法會在共用的 Virtual DOS Machine (VDM) 中執行新的進程。 如果設定為 True,此屬性可以在 Win.ini 的 Windows 區段中覆寫 DefaultSeparateVDM 參數。 如需詳細資訊,請參閱本主題的一節。
-
-
CreatorSID
-
-
資料類型: uint8 陣列
-
存取類型:唯讀
安全性識別碼 (SID) ,可唯一識別建立篩選的使用者。 WMI 會根據作業系統儲存建立 __EventConsumer 實例或系統管理員 SID 之使用者的 SID。 如需詳細資訊,請參閱 使用邏輯取用者系結事件篩選 和 監視和使用標準取用者回應事件。
此屬性繼承自 __EventConsumer。
-
-
DesktopName
-
-
資料類型: 字串
-
存取類型:唯讀
未使用。 如果將值指派給這個屬性,就會產生追蹤訊息。 如需詳細資訊,請參閱 追蹤 WMI 活動。
-
-
ExecutablePath
-
-
資料類型: 字串
-
存取類型:唯讀
要執行的模組。 字串可以指定要執行之模組的完整路徑和檔案名,也可以指定部分名稱。 如果指定部分名稱,則會假設目前的磁片磁碟機和目前的目錄。
ExecutablePath屬性可以是Null。 在此情況下,模組名稱必須是 CommandLineTemplate 屬性值中的第一個空白字元分隔標記。 如果使用包含空格的長檔名,請使用引號字串來指出檔案名結尾的位置,而引數會開始厘清檔案名。
注意
由於 CommandLineTemplate 屬性可以是範本,其中要執行的模組是由變數提供, 所以 NullExecutablePath 屬性允許參數中指定的模組執行,然後離開控制項。 一律在CommandLineEventConsumer註冊中設定ExecutablePath屬性以包含必要的可執行檔,以避免由事件參數覆寫。 如果您必須使用範本和變數來指定要執行的模組,請小心有關在命名空間中授與完整寫入權限的人員。
-
-
FillAttribute
-
-
資料類型: uint32
-
存取類型:唯讀
在主控台應用程式中建立新的主控台視窗時,指定初始文字和背景色彩
-
-
FillAttributes
-
-
資料類型: uint32
-
存取類型:讀取/寫入
初始文字和背景色彩,如果在主控台應用程式中建立新的主控台視窗。 GUI 應用程式中會忽略這個屬性。 此值可以是下列值的任何組合。
-
-
1 (0x1)
-
藍色前景
-
2 (0x2)
-
綠色前景
-
4 (0x4)
-
紅色前景
-
8 (0x8)
-
前景強度
-
16 (0x10)
-
藍色背景
-
32 (0x20)
-
綠色背景
-
64 (0x40)
-
紅色背景
-
128 (0x80)
-
背景強度
例如,下列組合會在白色背景上產生紅色文字:
0x4 | 0x40 | 0x20 | 0x10
或
0x74
ForceOffFeedback
-
資料類型: 布林值
-
存取類型:唯讀
如果 為 True,當進程啟動時,會強制關閉意見反應游標。 會顯示一般資料指標。
ForceOnFeedback
-
資料類型: 布林值
-
存取類型:唯讀
如果 為 True,表示在 呼叫 CreateProcess 之後,游標處於意見反應模式 2 秒。 在這兩秒期間,如果進程進行第一次 GUI 呼叫,系統會再提供五秒給進程。 在這五秒期間,如果進程顯示視窗,系統就會為程式提供另五秒的時間,以完成繪製視窗。
KillTimeout
-
資料類型: uint32
-
存取類型:唯讀
WMI 服務在終止進程 0 (零之前等候的秒數,以秒為單位,) 表示不會終止進程。 終止進程可防止進程無限期地執行。
MachineName
-
資料類型: 字串
-
存取類型:唯讀
Windows Management Instrumentation (WMI) 傳送事件的電腦名稱稱。
此屬性繼承自 __EventConsumer。
MaximumQueueSize
-
資料類型: uint32
-
存取類型:唯讀
特定取用者的最大佇列,以位元組為單位。
此屬性繼承自 __EventConsumer。
名稱
-
資料類型: 字串
-
存取類型:唯讀
-
限定詞: 索引鍵
取用者的唯一名稱。
優先順序
-
資料類型: sint32
-
存取類型:唯讀
排程進程執行緒的優先順序層級。 下列清單列出可用的優先順序層級。
32 (0x20)
表示不需要排程的正常程式。
64 (0x40)
指出只有在系統閒置時,執行緒才會執行的進程,而且會先由在較高優先順序類別中執行之任何進程的執行緒佔用。 例如螢幕保護裝置。 閒置優先權類別是由子進程繼承。
128 (0x80)
指出執行高優先順序、時間關鍵工作的進程。 高優先順序類別進程的執行緒會先占一般優先順序或閒置優先順序類別進程的執行緒。 例如工作清單,不論系統上的負載為何,使用者呼叫時必須快速回應。 使用高優先順序類別時非常小心,因為具有高優先順序類別的 CPU 系結應用程式幾乎可以使用所有可用的迴圈。
256 (0x100)
表示優先順序最高的進程。 即時優先順序類別進程的執行緒會先占所有其他進程的執行緒,包括執行重要工作的作業系統進程。 例如,執行超過簡短間隔的即時程式可能會導致磁片快取無法排清,或造成滑鼠沒有回應。
RunInteractively
-
資料類型: 布林值
-
存取類型:唯讀
如果 為 True,則會在互動式 WinStation 中啟動進程。 如果 為 False,則會在預設服務 WinStation 中啟動進程。 此屬性會覆寫 DesktopName 屬性。 只有在互動式使用者是設定取用者的相同使用者時,才會在本機使用這個屬性。
從 Windows Vista 開始,執行 CommandLineEventConsumer 實例的進程會在 LocalSystem 帳戶下啟動,且位於會話 0 中。 在會話 0 中執行的服務無法與使用者會話互動。
ShowWindowCommand
-
資料類型: uint32
-
存取類型:唯讀
視窗顯示狀態。 它可以是可在ShowWindow函式的 nCmdShow參數中指定的任何值。
UseDefaultErrorMode
-
資料類型: 布林值
-
存取類型:唯讀
如果 為 True,則會使用預設錯誤模式。
WindowTitle
-
資料類型: 字串
-
存取類型:唯讀
出現在進程的標題列上的標題。 GUI 應用程式會忽略這個屬性。
WorkingDirectory
-
資料類型: 字串
-
存取類型:唯讀
此程式的工作目錄。
XCoordinate
-
資料類型: uint32
-
存取類型:唯讀
如果建立新視窗,則 X 位移,以圖元為單位,從畫面左邊緣到視窗左邊緣。
XNumCharacters
-
資料類型: uint32
-
存取類型:唯讀
如果建立新的主控台視窗,則螢幕緩衝區寬度會以字元欄為單位。 GUI 進程中會忽略這個屬性。
XSize
-
資料類型: uint32
-
存取類型:唯讀
如果已建立新視窗,則為寬度,以圖元為單位的新視窗。
YCoordinate
-
資料類型: uint32
-
存取類型:唯讀
如果建立新視窗,則為 Y 位移,以圖元為單位,從畫面的上邊緣到視窗的上邊緣。
YNumCharacters
-
資料類型: uint32
-
存取類型:唯讀
如果已建立新的主控台視窗,則螢幕緩衝區高度會以字元列為單位。 GUI 進程中會忽略這個屬性。
YSize
-
資料類型: uint32
-
存取類型:唯讀
如果建立新的視窗,則為高度,以圖元為單位的新視窗。
備註
CommandLineEventConsumer類別衍生自抽象類別__EventConsumer。
CreateSeparateWowVdm屬性會指出新進程是否在私人 Virtual DOS Machine (VDM) 中執行。 個別執行的優點是當機只會終止單一 VDM。 在不同的 VM 中執行的程式會繼續正常運作,而在不同的 VM 中執行的 16 位 Windows 應用程式則有不同的輸入佇列。 這表示,如果一個應用程式暫時停止回應,個別 VM 中的應用程式會繼續接收輸入。 個別執行的缺點是需要更多記憶體才能這麼做。 只有當使用者要求 16 位 Windows 應用程式在其自己的 VDM 中執行時,才應該將此屬性設定為 True 。
注意
CommandLineEventConsumer會在內部使用CreateProcess方法,並將ExecutablePath和CommandLineTemplate屬性當做lpApplicationName和lpCommandLine參數傳遞。 下列 Managed 物件格式 (MOF) 程式碼範例未正確使用 CommandLineEventConsumer 。
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\scripts\\MyScript.js param1 param2";
};
CreateProcess方法會將lpCommandLine傳遞為 argv[0]
、 argv[1]
等等。 因為 argv[0]
對於用來保留給可執行檔名稱的 16 位應用程式,所以先前的 MOF 程式碼會產生建立的程式,就像在命令提示字元中輸入下列命令一樣: c:\windows\system32\cscript.exe param1 param2。
上一個命令不會成功,因為Cscript.exe不會查看 argv[0]
,因此它無法辨識它不包含自己的名稱,但其他專案 (「c:\\scripts\\MyScript.js」) 。 下列範例會識別 CommandLineEventConsumer的建議用法。
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\windows\\system32\\cscript.exe"
"C:\\scripts\\MyScript.js param1 param2";
};
先前使用 CommandLineEventConsumer 會導致在命令提示字元中輸入下列命令時所建立的程式: c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2
由於 「c:\\scripts\\MyScript.js」 現在 argv[1]
為 ,因此Cscript.exe且命令會成功。
如需詳細資訊,請參閱 CreateProcess 函式。
範例
如需使用 CommandLineEventConsumer 建立取用者的範例,請參閱 根據事件從命令列執行程式。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows Vista |
最低支援的伺服器 |
Windows Server 2008 |
命名空間 |
Root\subscription |
MOF |
|
DLL |
|