Hoofdstuk 10 - Les 3

Gebruik de statische methode Process.GetProcesses om alle huidige processen van het systeem op te halen. Om een specifiek process op te halen gebruik je het PID (Process ID): Process.GetProcessById. Om een process op te halen op basis van naam gebruik je: Process.GetProcessByName. Om het huidige process op te halen: Process.GetCurrent.

Als een process is geladen kan met Process.Modules alle modulen worden geladen, indien je voldoende rechten heb, anders wordt er een Win32Exception gegooid.

Als een Process object wordt aangemaakt, worden meteen alle properties geladen en gecached. Om de actuele waarden van de properties op te vragen moet eerst de Refresh methode aangeroepen worden.

Gebruik de statische methode Process.Start om een process te starten en geef hierbij mee de naam van de exe die gestart moet worden. Parameters kunnen als tweede parameter worde meegegeven.

Windows geeft veel informatie weer over de computer via WMI. Gebruik WMI om de setup van de applicatie te bepalen of wanneer er tools worden gemaakt voor systeem management.

Definieer eerst de management scope door een ManagementScope object aan te makenen vervolgens ManagementScope.Connect aan te roepen. Standaard is de management scope \\computer_name\root\cimv2.
ManagementScope ms = new ManagementScope(@"\\localhost\root\cimv2");
ms.Connect();
Daarnaast moet ook een WMI Query Lanquage (WQL) query worden gemaakt. Dit kan door een object te maken van ObjectQuery. WQL is een subset van SQL met uitbreidingen voor WMI ondersteuning en event notificatie en andere WMI features.
ObjectQuery q = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
Met de scope en query kan een ManagementObjectCollection object worden aangemaakt:
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, q);
ManagementObjectCollection collection = searcher.Get();
De scope is niet verplicht. managementObjectSearcher heeft ook een constructor waarbij enkel de query als een string kan worden meegegeven.

Het is mogelijk om te reageren op WMI events welke worden getriggered door veranderingen van het OS.
//Maak een event query om binnen 1 seconde genotificeerd te worden als er een verndering is in een service
WqlEventQuery q = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0,0,1), "targetInstance isa \"Win32_Process\"");

// Initialiseer een event watcher en subscribe aan events die voldoen aan de query
ManagementEventWatcher w = new ManagementEventWatcher(q);

// Block totdat de volgende event gebeurt
ManagementBaseObject e = w.WatForNextEvent();

// Toon informatie over het event
Console.WriteLine("Process {0} is gemaakt. Pad: {1}", ((ManagementBaseObject)e["TargetInstance"])["Name"], ((ManagementBaseObject)e["TargetInstance"])["ExecutablePath"]);

// Stop de subscription
w.Stop();
Er kan gereageerd worden op de managementEventWatcher.EventArrived event om een methode aan te roepen als het event zich voordoet. De event handler moet 2 parameters hebben: een object parameter en een EventArrivedEventArgs parameter. EventArrivedEventArgs.NewEvent is een ManagementBaseObject die het event beschrijft.

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren