Köra ett program från kommandoraden baserat på en händelse
Klassen CommandLineEventConsumer kör ett angivet körbart program från en kommandorad när en angiven händelse inträffar. Den här klassen är en standardhändelsekonsument som WMI tillhandahåller.
När du använder CommandLineEventConsumerbör du skydda den körbara fil som du vill starta. Om den körbara filen inte finns på en säker plats eller inte skyddas med en stark åtkomstkontrollista (ACL), kan en användare utan åtkomstbehörighet ersätta den körbara filen med en annan körbar fil. Du kan använda klasserna Win32_LogicalFileSecuritySetting eller Win32_LogicalShareSecuritySetting för att programmatiskt ändra säkerheten för en fil eller resurs. Mer information finns i Skapa en säkerhetsbeskrivning för ett nytt objekt i C++.
Den grundläggande proceduren för att använda standardkonsumenter är alltid densamma och finns i Övervakning och svar på händelser med standardkonsumenter. Följande procedur lägger till den grundläggande proceduren, är specifik för klassen CommandLineEventConsumer och beskriver hur du skapar en händelsekonsument som kör ett program.
Försiktighet
Klassen CommandLineEventConsumer har särskilda säkerhetsbegränsningar. Den här standardkonsumenten måste konfigureras av en lokal medlem i gruppen Administratörer på den lokala datorn. Om du använder ett domänkonto för att skapa prenumerationen måste LocalSystem-kontot ha de behörigheter som krävs för domänen för att verifiera att skaparen är medlem i den lokala gruppen Administratörer.
CommandLineEventConsumer kan inte användas för att starta en process som körs interaktivt.
Följande procedur beskriver hur du skapar en händelsekonsument som kör en process från en kommandorad.
Skapa en händelsekonsument som kör en process från en kommandorad
- I MOF-filen (Managed Object Format) skapar du en instans av CommandLineEventConsumer för att ta emot de händelser som du begär i frågan. Mer information finns i Utforma MOF-klasser (Managed Object Format).
- Skapa en instans av __EventFilter och ge den ett namn.
- Skapa en fråga för att ange typen av händelse. Mer information finns i Querying with WQL.
- Skapa en instans av __FilterToConsumerBinding för att associera filtret med instansen av CommandLineEventConsumer.
- Kompilera MOF-filen med hjälp av Mofcomp.exe.
Exempel
I följande kodexempel skapas en ny klass med namnet "MyCmdLineConsumer" för att generera händelser när en instans av den nya klassen skapas i slutet av en MOF. Exemplet finns i MOF-kod, men du kan skapa instanserna programmatiskt med hjälp av Scripting API för WMI eller COM API för WMI.
Följande procedur beskriver hur du skapar en ny klass med namnet MyCmdLineConsumer.
Skapa en ny klass med namnet MyCmdLineConsumer
- Skapa filen c:\cmdline_test.bat med ett kommando som kör ett synligt program, till exempel "calc.exe" .
- Kopiera MOF till en textfil och spara den med ett .mof-tillägg.
- I ett kommandofönster kompilerar du MOF-filen med hjälp av följande kommando: Mofcomp filename.mof.
Not
Programmet som anges i cmdline_test.bat ska köras.
// 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";
};
Relaterade ämnen