Inhalt
Ich bin ein Softwareentwickler. Ich arbeite seit 15 Jahren mit C ++ -, MFC- und .net-Technologien. Ich mag Videospiele und lese Bücher.
Was ist WMI?
WMIist Windows-Verwaltungsinstrumentierungund es wird dot net Framework helfen, die Systeminformationen abzurufen. WMI ist eine separate Welt von Klassen, die sich mit dem Zugriff auf die Systemressourcen befassen. Die WMI-Klassen, die normalerweise zum Abrufen der Systeminformationen verwendet werden. Änderungen an Systeminformationen werden selten über die WMI-Schnittstellen vorgenommen. In diesem Artikel werden wir uns ansehen, wie wir WMI-Instanzen erstellen. Ich werde alle im System ausgeführten Dienste abrufen und diese im Listenelement anzeigen.
Fensterbasierte Anwendung erstellen (Formularentwurf)
Der erste Schritt ist das Erstellen der Windows-Anwendung. Befolgen Sie die unten angegebenen Schritte:
- Erstellen Sie zunächst ein neues Visual C #, Windows-Anwendungsprojekt mit dem Namen CreateInstance
- Sobald das Formular angezeigt wird, gestalten Sie es wie folgt:
- Listbox Steuerung. Es ist Name Eigenschaft ist festgelegt als ctrlLstBox
- Taste Steuerung. Die Name-Eigenschaft ist festgelegt als btnServices. Dann Text Eigenschaft ist festgelegt als Holen Sie sich Services.
- Windows Form. Es ist Text Eigenschaft ist festgelegt als Holen Sie sich WMI-Instanzen
Sobald das Design fertig ist, wird das Klickereignis für das btnServices Schaltfläche wird erstellt. Um dieses Ereignis zu erstellen, doppelklicken Sie in der Entwurfsansicht auf die Schaltfläche Dienste abrufen.
Code-Implementierung
Durch Doppelklicken auf die Schaltfläche "Dienste abrufen" gelangen Sie in die unten angegebene Funktion. Diese Funktion ist eigentlich der Klickereignishandler für die Schaltfläche "Dienste abrufen".
private void btnServices_Click (Objektabsender, EventArgs e) {}
Wir werden den Code für diese Handlerfunktion ausschreiben. Wenn ein Benutzer auf die Schaltfläche klickt, wird der auf dem Handler geschriebene Code ausgeführt und zeigt die Ausgabe im ListBox-Steuerelement mit dem Namen an ctrlLstBox.
Bevor wir mit der Codierung beginnen, sollten wir den erforderlichen DLL-Verweis auf unsere einfügen CreateInsance Projekt. Klicken Sie dazu auf den Menüpunkt Projekt-> Referenz hinzufügen…. Aus dem angezeigten Dialogfeld (es kann eine Weile dauern, bis das Dialogfeld angezeigt wird) sollten wir das auswählen Systemmanagement Element und klicken Sie dann auf OK. Stellen Sie zur Auswahl von System.Management sicher, dass Sie sich auf der Registerkarte .Net befinden. Dies ist im folgenden Bild dargestellt:
Nach dem Hinzufügen dieser Referenz hat unser Projekt Zugriff auf die Funktionen der DotNet-DLL. System.Management.dll. Wir können überprüfen, ob die Referenz erfolgreich zum Projekt hinzugefügt wurde oder nicht, indem wir den Referenzknoten im Projektexplorer wie folgt überprüfen:
Sobald die Referenz fertig ist, beginnen wir mit dieser Codierung mit diesen Schritten.
1) Der erste Schritt ist das Hinzufügen des oben erstellten Verweises zum Anfang der Datei (nach der vorhandenen using-Anweisung). Auf diese Weise können wir auf die Klasse zugreifen, die im System.Management-Namespace gespeichert ist. Dieser Code wird unten angezeigt:
// Beispiel 01: Erforderlicher Namensraum mit System.Management;
2) Klicken Sie im Ereignishandler für Schaltflächenklicks zunächst auf „system.management.managementclass" geschaffen. Wir haben bestanden Win32_Services zu seinem Konstruktor und dabei erhalten wir die Win32-Service-Klasse zur Laufzeit. Aus dieser Klasse können wir alle dazugehörigen Instanzen abrufen. Unten finden Sie den Code, der das Erstellen der ManagementClass-Klasse mit dem Namen zeigt service_class.
// Beispiel 02: Verwaltungsklasse erstellen ManagementClass service_class = new ManagementClass ("Win32_Service");
3) Alle zum Win32_Service gehörenden Objekte werden aus dem abgerufen service_class Instanz, die wir aus dem vorherigen Schritt dieser Codierung erstellt haben. Der Aufruf der Funktion GetInstances () ruft alle Dienste ab, die im System als ausgeführt werden ManagementObjectSammlung. Dies wird im folgenden Code gezeigt:
// Beispiel 03: Holen Sie sich alle Objekte der Win32_Service-Klasse. Jedes Objekt // repräsentiert einen Dienst ManagementObjectCollection Service_objects_collection = service_class.GetInstances ();
4) Als nächstes erhalten wir jede Instanz der Klasse ManagementObject, indem wir die Service_objects_collection durchlaufen. Das Foreach-Konstrukt wird verwendet, um die Iteration durchzuführen. Sobald die ManagementObject-Instanz im Hauptteil der Foreach-Schleife verfügbar ist, rufen wir die name-Eigenschaft der Instanz ab und fügen sie dem Listbox-Steuerelement hinzu. Der Code wird unten angezeigt:
// Beispiel 04: Durchlaufen Sie jeden Dienst und zeigen Sie den Namen des // Dienstes foreach an (ManagementObject-Dienst in Service_objects_collection) {ctrlLstBox.Items.Add (Dienst ["Name"]. ToString ()); }}
Der Screenshot nach dem Ausführen des Button-Click-Handlers ist unten dargestellt:
Der vollständige Code in der Datei wird unten angezeigt:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; // Beispiel 01: Erforderlicher Namensraum mit System.Management; Namespace CreateInstance {öffentliche Teilklasse Form1: Form {public Form1 () {InitializeComponent (); } private void btnServices_Click (Objektabsender, EventArgs e) {// Beispiel 02: Verwaltungsklasse erstellen ManagementClass service_class = new ManagementClass ("Win32_Service"); // Beispiel 03: Alle Objekte der Win32_Service-Klasse abrufen. Jedes Objekt // repräsentiert einen Dienst ManagementObjectCollection Service_objects_collection = service_class.GetInstances (); // Beispiel 04: Durchlaufen Sie jeden Dienst und zeigen Sie den Namen des // Dienstes foreach an (ManagementObject-Dienst in Service_objects_collection) {ctrlLstBox.Items.Add (Dienst ["Name"]. ToString ()); }}}}
Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.