Klasse CommandLineEventConsumer
Die Klasse CommandLineEventConsumer startet einen beliebigen Prozess im lokalen System, wenn ein Ereignis an sie übermittelt wird. Diese Klasse ist einer der Standardereignisconsumer, die WMI bereitstellt. Weitere Informationen finden Sie unter Überwachen von und Reagieren auf Ereignisse mit Standardconsumern.
Hinweis
Wenn Sie die Klasse CommandLineEventConsumer verwenden, sichern Sie die ausführbare Datei, die Sie starten möchten. Wenn sich die ausführbare Datei nicht an einem sicheren Speicherort befindet oder mit einer starken Zugriffssteuerungsliste (Strong Access Control List, ACL) geschützt ist, kann ein nicht autorisierter Benutzer Ihre ausführbare Datei durch eine böswillige ausführbare Datei ersetzen. Weitere Informationen zu ACLs finden Sie im Abschnitt Sicherheit des Microsoft Windows Software Development Kit (SDK) und unter Erstellen einer Sicherheitsbeschreibung für ein neues Objekt.
Syntax
[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;
};
Member
Die Klasse CommandLineEventConsumer verfügt über die folgenden Membertypen:
Eigenschaften
Die Klasse CommandLineEventConsumer verfügt über diese Eigenschaften.
-
CommandLineTemplate
-
-
Datentyp: string (Zeichenfolge)
-
Zugriffstyp: Schreibgeschützt
Standardzeichenfolgenvorlage, die den zu startenden Prozess angibt. Diese Eigenschaft kann NULL sein, und die Eigenschaft ExecutablePath wird als Befehlszeile verwendet.
-
-
CreateNewConsole
-
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
Wird nicht verwendet. Wenn dieser Eigenschaft ein Wert zugewiesen wird, wird eine Ablaufverfolgungsmeldung generiert. Weitere Informationen finden Sie unter Ablaufverfolgung der WMI-Aktivität.
-
-
CreateNewProcessGroup
-
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
True gibt an, dass der neue Prozess der Stammprozess einer neuen Prozessgruppe ist. Die Prozessgruppe umfasst alle Prozesse, die Nachfolger dieses Stammprozesses sind. Der Prozessbezeichner der neuen Prozessgruppe ist identisch mit diesem Prozessbezeichner. Prozessgruppen werden von der Methode GenerateConsoleCtrlEvent verwendet, um das Senden eines STRG+C- oder STRG+BREAK-Signals an eine Gruppe von Konsolenprozessen zu aktivieren.
-
-
CreateSeparateWowVdm
-
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
True gibt an, dass der neue Prozess auf einem privaten virtuellen DOS-Computer (VDM) ausgeführt wird. Dies gilt nur beim Starten einer Anwendung, die unter einem 16-Bit-Windows-Betriebssystem ausgeführt wird. Wenn dieser Wert auf False festgelegt ist, werden alle Anwendungen, die unter einem 16-Bit-Windows-Betriebssystem ausgeführt werden, als Threads in einem einzelnen, freigegebenen VDM ausgeführt. Weitere Informationen finden Sie in diesem Thema im Abschnitt „Hinweise“.
-
-
CreateSharedWowVdm
-
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
Bei True führt die Methode CreateProcess den neuen Prozess auf dem freigegebenen virtuellen DOS-Computer (VDM) aus. Diese Eigenschaft kann den DefaultSeparateVDM-Schalter im Windows-Abschnitt von Win.ini außer Kraft setzen, wenn sie auf True festgelegt ist. Weitere Informationen finden Sie in diesem Thema im Abschnitt „Hinweise“.
-
-
CreatorSID
-
-
Datentyp: uint8-Array
-
Zugriffstyp: Schreibgeschützt
Die Sicherheits-ID (SID), die den Benutzer oder die Benutzerin, der/die einen Filter erstellt, eindeutig identifiziert. Je nach Betriebssystem speichert WMI die SID des Benutzers bzw. der Benutzerin, der/die eine Instanz von __EventConsumer erstellt, oder die Administrator-SID. Weitere Informationen finden Sie unter Binden eines Ereignisfilters an einen logischen Consumer und Überwachen von Ereignissen und Reagieren auf Ereignisse mit Standardconsumern.
Diese Eigenschaft wird von __EventConsumer geerbt.
-
-
DesktopName
-
-
Datentyp: string (Zeichenfolge)
-
Zugriffstyp: Schreibgeschützt
Wird nicht verwendet. Wenn dieser Eigenschaft ein Wert zugewiesen wird, wird eine Ablaufverfolgungsmeldung generiert. Weitere Informationen finden Sie unter Ablaufverfolgung der WMI-Aktivität.
-
-
ExecutablePath
-
-
Datentyp: string (Zeichenfolge)
-
Zugriffstyp: Schreibgeschützt
Auszuführendes Modul. Die Zeichenfolge kann den vollständigen Pfad und Dateinamen des auszuführenden Moduls oder einen Teilnamen angeben. Wenn ein Teilname angegeben wird, werden das aktuelle Laufwerk und das aktuelle Verzeichnis angenommen.
Die Eigenschaft ExecutablePath kann NULL sein. In diesem Fall muss der Modulname das erste durch Leerzeichen getrennte Token im Wert der Eigenschaft CommandLineTemplate sein. Wenn Sie einen langen Dateinamen verwenden, der ein Leerzeichen enthält, verwenden Sie Zeichenfolgen in Anführungszeichen, um anzugeben, wo der Dateiname endet und die Argumente beginnen, den Dateinamen zu verdeutlichen.
Hinweis
Da die Eigenschaft CommandLineTemplate eine Vorlage sein kann, in der das auszuführende Modul von einer Variablen bereitgestellt wird, lässt eine NULL-EigenschaftExecutablePath das im Parameter angegebene Modul auszuführen, und dann ist es außerhalb Ihrer Kontrolle. Legen Sie die Eigenschaft ExecutablePath in der Registrierung CommandLineEventConsumer immer so fest, dass sie die erforderliche ausführbare Datei enthält, wodurch das Überschreiben durch Ereignisparameter vermieden wird. Wenn Sie eine Vorlage und eine Variable verwenden müssen, um das auszuführende Modul anzugeben, achten Sie darauf, wem im Namespace vollständige Schreibberechtigungen gewährt werden.
-
-
FillAttribute
-
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Gibt die Anfangstext- und Hintergrundfarben an, wenn ein neues Konsolenfenster in einer Konsolenanwendung erstellt wird
-
-
FillAttributes
-
-
Datentyp: uint32
-
Zugriffstyp: Lesen/Schreiben
Anfängliche Text- und Hintergrundfarben, wenn ein neues Konsolenfenster in einer Konsolenanwendung erstellt wird. Diese Eigenschaft wird in einer GUI-Anwendung ignoriert. Für die Zeichenfolge ist eine Kombination der folgenden Werte gültig.
-
-
1 (0x1)
-
blauer Vordergrund
-
2 (0x2)
-
grüner Vordergrund
-
4 (0x4)
-
roter Vordergrund
-
8 (0x8)
-
Vordergrundintensität
-
16 (0x10)
-
blauer Hintergrund
-
32 (0x20)
-
grüner Hintergrund
-
64 (0x40)
-
roter Hintergrund
-
128 (0x80)
-
Hintergrundintensität
Beispielsweise ergibt die folgende Kombination schwarzen Text auf einem weißen Hintergrund:
0x4 | 0x40 | 0x20 | 0x10
oder
0x74
ForceOffFeedback
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
True gibt an, dass der Feedback-Cursor deaktiviert wird, während der Prozess gestartet wird. Der normale Cursor wird angezeigt.
ForceOnFeedback
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
Bei True befindet sich der Cursor zwei Sekunden lang im Feedbackmodus, nachdem CreateProcess aufgerufen wurde. Wenn der Prozess während dieser zwei Sekunden den ersten GUI-Aufruf vornimmt, gibt das System dem Prozess fünf Sekunden mehr Zeit. Wenn der Prozess während dieser fünf Sekunden ein Fenster anzeigt, gibt das System dem Prozess weitere fünf Sekunden, um das Zeichnen des Fensters abzuschließen.
KillTimeout
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Die Zahl in Sekunden, die der WMI-Dienst wartet, bevor ein Prozess 0 (Null) beendet wird, gibt an, dass ein Prozess nicht beendet werden soll. Das Beenden eines Prozesses verhindert, dass ein Prozess unbegrenzt ausgeführt wird.
MachineName
-
Datentyp: string
-
Zugriffstyp: Schreibgeschützt
Der Name des Computers, an den die Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI) Ereignisse sendet.
Diese Eigenschaft wird von __EventConsumer geerbt.
MaximumQueueSize
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Die maximale Warteschlange für einen bestimmten Consumer in Byte.
Diese Eigenschaft wird von __EventConsumer geerbt.
Name
-
Datentyp: string
-
Zugriffstyp: Schreibgeschützt
-
Qualifizierer: Key
Eindeutiger Name eines Consumers.
Priority
-
Datentyp: sint32
-
Zugriffstyp: Schreibgeschützt
Planungsprioritätsebene der Prozessthreads. In der folgenden Liste sind die verfügbaren Prioritätsstufen aufgeführt.
32 (0x20)
Gibt einen normalen Prozess ohne Planungsanforderungen an.
64 (0x40)
Gibt einen Prozess an, dessen Threads nur ausgeführt werden, wenn sich das System im Leerlauf befindet und von den Threads eines Prozesses, der in einer Klasse mit höherer Priorität ausgeführt wird, vorzeitig entfernt werden. Ein Beispiel ist ein Bildschirmschoner. Diese Leerlauf-Prioritätsklasse wird von untergeordneten Prozessen geerbt.
128 (0x80)
Gibt einen Prozess an, der zeitkritische Aufgaben mit hoher Priorität ausführt. Die Threads eines Klassenprozesses mit hoher Priorität verdrängen die Threads von Klassenprozessen mit normaler Priorität oder Leerlaufpriorität. Ein Beispiel ist die Aufgabenliste, die schnell reagieren muss, wenn sie vom Benutzer aufgerufen wird, unabhängig von der Auslastung des Systems. Verwenden Sie bei der Verwendung der Klasse mit hoher Priorität äußerste Sorgfalt, da eine CPU-gebundene Anwendung mit einer Klasse mit hoher Priorität fast alle verfügbaren Zyklen verwenden kann.
256 (0x100)
Gibt einen Prozess an, der die höchstmögliche Priorität hat. Die Threads eines Prozesses mit der Prioritätsklasse Echtzeitpriorität haben Vorrang vor den Threads aller übrigen Prozesse, einschließlich Betriebssystemprozessen, die wichtige Aufgaben ausführen. Daher kann beispielsweise ein Prozess mit der Priorität Echtzeit, der länger als nur für einen kurzen Zeitraum ausgeführt wird, dazu führen, dass Datenträgercaches nicht geleert werden oder die Maus nicht mehr reagiert.
RunInteractively
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
True gibt an, dass der Prozess auf der interaktiven WinStation gestartet wird. False gibt an, dass der Prozess im Standarddienst WinStation gestartet wird. Diese Eigenschaft überschreibt die Eigenschaft DesktopName. Diese Eigenschaft wird nur lokal und nur verwendet, wenn der interaktive Benutzer derselbe Benutzer ist, der den Consumer eingerichtet hat.
Ab Windows Vista wird der Prozess, der die Instanz CommandLineEventConsumer ausführt, unter dem Konto LocalSystem gestartet und befindet sich in Sitzung 0. Dienste, die in Sitzung 0 ausgeführt werden, können nicht mit Benutzersitzungen interagieren.
ShowWindowCommand
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Fenster zeigt den Status an. Dies kann jeder der Werte sein, die im Parameter nCmdShow für die Funktion ShowWindow angegeben werden können.
UseDefaultErrorMode
-
Datentyp: Boolesch
-
Zugriffstyp: Schreibgeschützt
Bei True wird der Standardfehlermodus verwendet.
WindowTitle
-
Datentyp: string (Zeichenfolge)
-
Zugriffstyp: Schreibgeschützt
Titel, der auf der Titelleiste des Prozesses angezeigt wird. Diese Eigenschaft wird in einer GUI-Anwendung ignoriert.
WorkingDirectory
-
Datentyp: string
-
Zugriffstyp: Schreibgeschützt
Arbeitsverzeichnis für diesen Prozess.
XCoordinate
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
X-Offset in Pixel vom linken Bildschirmrand zum linken Rand des Fensters, wenn ein neues Fenster erstellt wird.
XNumCharacters
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Bildschirmpufferbreite in Zeichenspalten, wenn ein neues Konsolenfenster erstellt wird. Diese Eigenschaft wird in einem GUI-Prozess ignoriert.
XSize
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Breite eines neuen Fensters in Pixel, wenn ein neues Fenster erstellt wird.
YCoordinate
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Y-Offset in Pixel vom oberen Bildschirmrand zum oberen Rand des Fensters, wenn ein neues Fenster erstellt wird.
YNumCharacters
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Bildschirmpufferhöhe in Zeichenzeilen, wenn ein neues Konsolenfenster erstellt wird. Diese Eigenschaft wird in einem GUI-Prozess ignoriert.
YSize
-
Datentyp: uint32
-
Zugriffstyp: Schreibgeschützt
Höhe eines neuen Fensters in Pixel, wenn ein neues Fenster erstellt wird.
Bemerkungen
Die Klasse CommandLineEventConsumer wird von der abstrakten Klasse __EventConsumer abgeleitet.
Die Eigenschaft CreateSeparateWowVdm gibt an, ob der neue Prozess auf einem privaten virtuellen DOS-Computer (VDM) ausgeführt wird. Der Vorteil der getrennten Ausführung besteht darin, dass ein Absturz nur den einzelnen VDM beendet. Programme, die in unterschiedlichen VDMs ausgeführt werden, funktionieren weiterhin normal, und die 16-Bit-Windows-basierten Anwendungen, die in separaten VDMs ausgeführt werden, verfügen über separate Eingabewarteschlangen. Wenn also eine Anwendung vorübergehend nicht mehr reagiert, erhalten die Anwendungen in separaten VDMs weiterhin Eingaben. Der Nachteil der getrennten Ausführung besteht darin, dass dafür deutlich mehr Arbeitsspeicher benötigt wird. Sie sollten diese Eigenschaft nur auf True festlegen, wenn der Benutzer anfordert, dass 16-Bit-Windows-basierte Anwendungen in einem eigenen VDM ausgeführt werden.
Hinweis
CommandLineEventConsumer verwendet intern die Methode CreateProcess und übergibt die Eigenschaften ExecutablePath und CommandLineTemplate als Parameter lpApplicationName und lpCommandLine. Im folgenden MOF-Codebeispiel (Managed Object Format) wird CommandLineEventConsumer nicht ordnungsgemäß verwendet.
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\scripts\\MyScript.js param1 param2";
};
Die Modell CreateProcess übergibt lpCommandLine als argv[0]
, argv[1]
usw. Da argv[0]
für 16-Bit-Anwendungen früher für den Namen der ausführbaren Datei reserviert waren, führt der vorherige MOF-Code dazu, dass der Prozess so erstellt wird, als ob der folgende Befehl an der Eingabeaufforderung eingegeben wird: c:\windows\system32\cscript.exe param1 param2.
Der vorherige Befehl ist nicht erfolgreich, da Cscript.exe nicht auf argv[0]
betrachtet und daher nicht erkennt, dass er keinen eigenen Namen enthält, sondern etwas anderes ("c:\\scripts\\MyScript.js"). Im folgenden Beispiel wird die empfohlene Verwendung von CommandLineEventConsumer identifiziert.
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\windows\\system32\\cscript.exe"
"C:\\scripts\\MyScript.js param1 param2";
};
Die vorherige Verwendung von CommandLineEventConsumer führt dazu, dass der Prozess so erstellt wurde, als ob der folgende Befehl an der Eingabeaufforderung eingegeben wurde: c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2
Da "c:\\scripts\\MyScript.js" jetzt argv[1]
ist, wird es von Cscript.exe angezeigt, und der Befehl ist erfolgreich.
Weitere Informationen finden Sie unter der Funktion CreateProcess.
Beispiele
Ein Beispiel für die Verwendung von CommandLineEventConsumer zum Erstellen eines Consumers finden Sie unter Ausführen eines Programms über die Befehlszeile basierend auf einem Ereignis.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) |
Windows Vista |
Unterstützte Mindestversion (Server) |
Windows Server 2008 |
Namespace |
Root\subscription |
MOF |
|
DLL |
|