Windows ConfidentialWarten auf RunOnce

Raymond Chen

DENKEN SIE an eine Installation, die das System mitten in einem laufenden Prozess neu starten muss. Das Installationsprogramm könnte beispielsweise versuchen, eine System-DLL-Datei zu aktualisieren, die derzeit in Verwendung ist. Sie müssten einen eingreifenden Neustart auslösen, damit die neue DLL-Datei installiert wird, und nach der Aktualisierung der DLL-Datei könnten Sie sie in der nächsten Phase der Installation verwenden.

Der RunOnce-Schlüssel wurde für diese Art von Szenario entwickelt, also zu dem Zweck, von Installationsprogrammen dafür verwendet zu werden, nach einem eingreifenden Neustart ihre Installation abzuschließen. (Dies geschah in der guten alten Zeit, in der man sich noch darauf verließ, dass Programme keine Fehler machen.)

Windows® Explorer wartet, bis die Ausführung des Programms RunOnce vollständig abgeschlossen ist, bevor der Desktop und die Taskleiste erstellt werden. Dies liegt daran, dass RunOnce nach dem Grundsatz ausgeführt wird, für Installationsprogramme verwendet zu werden. Das Programm RunOnce könnte ja Systemkonfigurationsdaten ändern, und Sie wollen daher verhindern, dass der Benutzer ein System verwendet, während es gerade umkonfiguriert wird.

Nehmen wir beispielsweise einmal an, das Programm RunOnce wäre dabei, für die Dateien, die es eben installiert hat, eine neue Basis aufzubauen und die Dateien zu binden, und einige dieser Dateien sind Teil einer Shellerweiterung. Sie wollen unter keinen Umständen, dass der Benutzer versucht, das Programm auszuführen oder die Erweiterung zu aktivieren, während die Aktualisierung der zugehörigen EXE-Datei noch im Gange ist.

Ein anderes Problem des Grundsatzes „es ist für Installationsprogramme vorgesehen“ besteht darin, dass der RunOnce-Schlüssel nur verarbeitet wird, wenn sich ein Benutzer mit Administratorrechten anmeldet. Folglich könnten Benutzer, die keine Administratoren sind, die Installation nicht abschließen. Außerdem würde der RunOnce-Schlüssel, wenn er für Benutzer ausgeführt wird, die keine Administratoren sind, nicht mehr, wie sein Name sagt, nur einmal ausgeführt werden („run once“). Dies würde wirklich zu einem großen Dilemma führen. Wie würden Sie sagen „Gut, ich habe das da ausgeführt, also führe es nicht noch einmal aus“? Um diesen systemweiten Zustand zu ändern, bräuchten Sie Administratorrechte. Doch wie schon gesagt, besitzt ein Benutzer, der kein Administrator ist, auch keine Administratorrechte! Das Programm würde nicht nur einmal, sondern immer wieder aufs Neue ausgeführt werden, bis sich endlich ein Administrator anmeldet.

  (Klicken Sie zum Vergrößern auf das Bild)

RunOnce, das für die Fertigstellung von Programminstallationen entwickelt wurde, wird in Windows Setup selbst verwendet. Wenn Sie versuchen, ein Service Pack zu installieren oder Windows auf eine neuere Version zu aktualisieren, überprüft der Installationsassistent den RunOnce-Schlüssel. Ist dieser Schlüssel nicht leer, erhalten Sie eine Fehlermeldung, die besagt: „He, bei Ihnen ist eine noch nicht abgeschlossene Programminstallation im Gange. Bitte schließen Sie diese Installation ab, bevor Sie versuchen, das Betriebssystem zu aktualisieren“. Dies ist auch richtig so, denn Sie wollen ja das Betriebssystem nicht mitten während der Installation eines Programms ändern.

Die ganze Aufbau von RunOnce verrät seine Vergangenheit. Es wurde unter Windows 95 ausgebrütet, also in einem Betriebssystem, das zwischen Administratoren und Nicht-Administratoren noch keinen Unterschied machte. Da unter Windows 95 praktisch jeder ein Administrator war, konnte sich ein Installationsprogramm, das mit RunOnce arbeitete, darauf verlassen, dass die RunOnce-Aktionen beim nächsten Neustart durchgeführt wurden.

Bei neueren Windows-Betriebssystemen – insbesondere bei Windows Vista™ – ist es möglich, dass sich monatelang niemand mit Administratorrechten anmeldet. Demzufolge kann sich ein Programm, das RunOnce ausführen muss, auf eine sehr lange Wartezeit gefasst machen.

Übrigens habe ich einmal auch ein ständig laufendes RunOnce gesehen. Es hat sich bei jeder Ausführung selbst neu zum RunOnce-Schlüssel hinzugefügt. Dies verstößt eindeutig gegen den Zweck des RunOnce-Schlüssels, da es dadurch nicht mehr Teil der Programminstallation, sondern Teil des normalen Ablaufs des Programms ist. Hinzu kommt, dass dieses Verhalten Windows Setup ständig dazu veranlasst, zu melden, dass eine Installation im Gange sei.

Daher kann der Benutzer nie das Betriebssystem aufrüsten, denn dieses einzelne lästige Programm sagt bei jedem Versuch sein Sprüchlein auf: „Ich muss nur noch ein paar Kleinigkeiten erledigen, und danach bin ich fertig, ehrlich“. Das Programm wird die Installation allerdings heute nicht mehr abschließen, „aber morgen ganz bestimmt“. Das ist nicht viel anders als beim Warten auf Godot, aber hoffentlich ohne diese existenzielle Krise.

Raymond Chen, The Old New Thing, beschreibt die Geschichte von Windows und die Win32-Programmierung. Raymond Chen arbeitet derzeit an einem Buch, das zufälligerweise ebenfalls den Titel „The Old New Thing“ (Addison-Wesley, 2007) trägt.

© 2008 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.