Mittwoch, 19. September 2012

Systemwiederherstellungspunkt erstellen

Im heutigen Post möchte ich zeigen, wie man mit C# einen Systemwiederherstellungspunkt anlegt.
Dafür benutzen wir Management Klassen, welche sich mit der Windows Management Instrumentation (WMI) verbinden und so Informationen über den PC auslesen.
Damit das Programm läuft, muss mittels Projekt - Verweis hinzufügen System.Management eingebunden werden und dises zusätzlich mittels using. Außerdem muss das Programm mit Administratorrechten ausgeführt werden.
Zentral ist eine Instanz der Klasse ManagementClass.
Deren Konstruktor erwartet 3 Parameter:
Zuerst einen Scope, der hier auf den lokalen PC festgelegt wird, dann einen Pfad, welcher die auszuführende Operation defininiert (hier Wiederherstellungspunkt erstellen) und zuletzt eine Klasse mit Optionen, hierfür übergeben wir die Standardoptionen eines WMI Aufrufs.
Von der erzeugten Instanz wird die Funktion GetMethodParameters() mit Parameter "CreateRestorePoint" aufgerufen. Dieses weist die Anwendung an, die Parameter der WMI Funktion "CreateRestorePoint" zu laden, sodass diese dann belegt werden können. CreateRestorePoint erwartet 3 Parameter:
  • Description: Beschreibung des Wiederherstellungspunkts.
  • RestorePointType: Typ des Wiederherstellungspunkts. Genaueres zu den verfügbaren Optionen (auch zum nächsten Parameter) gibt es z.B. auf dieser Seite. Wir übergeben hier 0, was bedeuten soll, dass eine Anwendung installiert wurde, eine 10 bedeutet beispielsweise, dass ein Treiber installiert wurde.
  • EventType: Typ des Ereignisses. Wir übergeben hier 100, was bedeutet, dass im System eine Veränderung begonnen wurde, 101 hieße beispielsweise, dass die Veränderung abgeschlossen ist.
Mit InvokeMethod() rufen wir schließlich die ganze Aktion auf und erstellen den Wiederherstellungspunkt.
Zum Schluss der Code:

                // lokalen Computer auswählen
                ManagementScope ManScope = new ManagementScope(@"\\localhost\root\default");
                // Systemwiederherstellung auswählen
                ManagementPath ManPath = new ManagementPath("SystemRestore");
                // Standardoptionen auswählen
                ObjectGetOptions ManOptions = new ObjectGetOptions();
                // Management Klasse aus vorigen Auswahlen erstellen
                ManagementClass ManClass = new ManagementClass(ManScope, ManPath, ManOptions);
                // Methodenparameter laden
                ManagementBaseObject ManBaseObject = ManClass.GetMethodParameters("CreateRestorePoint");
                // Beschreibung 
                ManBaseObject["Description"] = "Mein C# Wiederherstellungspunkt";
                // Typ des Wiederherstellungspunkts
                ManBaseObject["RestorePointType"] = 0;
                // Typ des Events
                ManBaseObject["EventType"] = 100;

                ManagementBaseObject OutParam = ManClass.InvokeMethod("CreateRestorePoint", ManBaseObject, null);

Keine Kommentare:

Kommentar veröffentlichen