Share via


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
Wbemcons.mof
DLL
Wbemcons.dll

Weitere Informationen

Standardconsumerklassen

Überwachen von Ereignissen und Reagieren auf Ereignisse mit Standardconsumern

Erstellen eines logischen Consumers

Empfang von Ereignissen zu jeder Zeit

__EventConsumer