Verfasst von: Michael | 21/12/2010

System Restore API in .NET

Ein selten genutztes Feature von Windows sind die Wiederherstellungspunkte (WHP, immerhin seit Windows 2000 verfügbar). Normalerweise braucht man sie nicht, im Ernstfall können sie aber sehr nützlich sein. Unter Ernstfall verstehe ich eine fehlerhafte Treiberinstallation, eine amoklaufende Applikation, kurzum alles, was das System destabilisieren kann. Ist das System in einem solchen Zustand, kann auf einen WHPs zurückgefahren werden und das System funktioniert wieder wie zu dem Zeitpunkt der Erzeugung des WHP.

Was weniger bekannt ist: man kann auch selbst WHPs erzeugen. Das geht zum einen per Mausklick, zum anderen gibt es aber auch das System Restore API, dass sich von C++-Programmen nutzen lässt. Leider gibt es im .NET-Framework keine entsprechenden Wrapper-Klassen, daher habe ich ausgehend von einem OpenSource-Projekt einen eigenen gebastelt (Download Source).

Die Benutzung ist sehr einfach:

using (var sysChg = SystemChange.ForInstallation("My Restore Point"))
{
  Console.WriteLine("Press <RETURN> when finished");
  Console.ReadLine();
  sysChg.Finish();
  Console.WriteLine("Restore-Point saved");
}

Dabei wird der WHP namens “My Restore Point” angelegt. Wenn die Installation (also die Systemveränderung, die u. U. rückgängig gemacht werden soll) fertig ist, wird der SystemChange mit Finish() abgeschlossen. Die SystemChange-Klasse kapselt für die einfachere Verwendung das eigentliche Low-Level-API SystemRestore. Wie am Screenshot zu sehen ist, wurde der WHP angelegt.

image

Um einen WHP herstellen zu können, muss man lokaler Administrator sein. Ansonsten bricht das Programm mit einer AccessDeniedException ab.


Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Log Out / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Log Out / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Log Out / Ändern )

Verbinde mit %s

Kategorien

Follow

Get every new post delivered to your Inbox.