Neno Lojes Vista-Tagebuch

Tag 34: Der Anwendungs letzter Wille

Was wären wohl die Gedanken eines Computerprogramms, was nach Ihrem Ableben (im Arbeitsspeicher) passieren sollte? Keine Ahnung. Klar ist dagegen, was passiert, wenn ein Programm „dahingeschieden“ ist: Ein vom Internet Explorer oder Office-Produkten bekanntes Verhalten ist, dass eine Anwendung, die beispielsweise durch einen Fehler geschlossen wurde, danach wieder neu gestartet wird. Häufig versuchen die Programmierer dabei auch noch Daten zu retten, so wie Word eine wiederhergestellte Fassung der zuletzt bearbeiteten Datei anbietet.

Mit Vista wurde ein neues API eingeführt: Application Recovery and Restart (ARR) API. Es bietet dem Softwareentwickler:

Die Möglichkeit, Daten und Zustandsinformationen zu speichern, bevor das Programm aufgrund einer unbehandelten Ausnahme beendet wurde oder nicht mehr reagiert ("hängt").

Auf Wunsch wird das Programm danach auch neu gestartet.

Die gleiche Logik tritt auch in Kraft, wenn eine Komponente oder Anwendung während eines Updates ausgetauscht werden muss.

Es handelt sich um die selben API-Funktionen, die wir schon bei der Fehlerberichterstattung (Windows Error Reporting) kennengelernt haben.

Ein neuer Zeitgenosse von Windows Vista ist der Restart Manager. Er kommt dann zum Einsatz, wenn der Windows Installer beim Installieren und Deinstallieren - wenn er auf eine Datei stößt, die er nicht ersetzen kann - dem Benutzer die Wahl gibt, ob er Windows neu starten möchte oder die betroffenen Applikationen neugestartet werden sollen. Ist Ihre Anwendung für einen Neustart angemeldet, wird sie neu gestartet.

Wie Sie korrekt auf die Nachrichten reagieren, steht in diesem Beispiel.

Ist Ihre Anwendung kompatibel mit dem Restart Manager?

Wie können Sie Ihre Anwendung testen, ohne jedesmal Software zu installieren? Das kleine Kommandozeilenwerkzeug RMTool.exe simuliert das Verhalten vom Restart Manager. Nach Aufruf schickt es die nötigen Windows-Nachrichten ab, um einen Neustart auszulösen. Der korrekte Aufruf lautet:

Rmtool.exe –p dwPID –S –R

Wobei dwPID die Prozess-ID des laufenden Programms steht (kann im Task Manager nachgeschlagen werden; über Ansicht > Spalten auswählen > "PID (-Prozess-ID)" ).

Fazit: Gleich als erste Zeile in Ihrem Programm (über RegisterApplicationRestart) für einen Neustart im Falle des Falles anmelden! Die Funktion bekommt einen Parameter mit, der später an die neu gestartete Programminstanz übergeben wird. So können Sie feststellen, dass es sich um einen Neustart durch den Restart Manager handelt. Denken Sie auch daran, den Zustand und ggf. weitere Daten wegzuspeichern (wie in diesem Codeclip beschrieben) und diese nach dem Neustart wiederherzustellen. So wird der Benutzer durch den Neustart möglichst wenig in seiner Arbeit unterbrochen.

Viel Spaß mit dem Vista Restart Manager!

Ihr Neno Loje

P.S. Übrigens: Über das Restart Manager API können Sie auch herausfinden, welche Dateien von einem Prozess genutzt werden. Die technischen Hintergründe erklärt uns Dariusz Parys.

Neno Loje
Freier Berater & Fachautor
Sie haben Fragen zu Visual Studio Team System (VSTS) oder Anregungen und Kommentare zu meinem Vista-Tagebuch? Dann freue ich mich auf Ihre Nachricht.

* *
* *