Windows ConfidentialEn attendant RunOnce

Raymond Chen

PRENONS L'EXEMPLE D'UNE installation qui requiert un redémarrage du système au milieu du processus. Par exemple, le programme peut souhaiter mettre à niveau un système DLL en cours d'utilisation. Vous devriez effectuer un redémarrage intermédiaire pour que le nouveau fichier DLL soit installé et une fois le DLL mis à niveau, vous pourriez l'utiliser lors de la prochaine étape de l'installation.

La clé RunOnce était destinée à ce type de scénario—à être utilisée par les programmes d'installation pour terminer leur installation après un redémarrage intermédiaire. (Cela remonte à l'époque où l'on pensait que les programmes étaient fiables.)

Windows® Explorer attend que le programme RunOnce soit exécuté jusqu'à la fin avant de créer le bureau et la barre des tâches. Cela tient au fait que RunOnce fonctionne suivant le principe que c'est fait pour les programmes d'installation. Le programme RunOnce pourrait changer les données de configuration du système et vous ne voudriez pas que l'utilisateur utilise un système en cours de reconfiguration.

Imaginons, par exemple, que le programme RunOnce soit en train de relocaliser et de lier les fichiers qu'il vient d'installer - et que certains d'entre eux font partie d'une extension de l'interpréteur de commandes. Vous ne souhaitez certainement pas que l'utilisateur tente d'exécuter le programme ou d'activer l'extension alors que son exécutable est toujours en train d'être mis à jour.

Un autre inconvénient du principe « c'est fait pour les programmes d'installation » réside dans le fait que la clé RunOnce n'est traitée que si un utilisateur avec des privilèges d'administrateur ouvre une session. Ainsi, les utilisateurs qui ne sont pas des administrateurs ne seraient pas en mesure de terminer l'installation. Par ailleurs, si la clé RunOnce était exécutée pour des utilisateurs non-administrateurs, elle ne serait plus une clé « run once » (à exécution unique). En fait, cela pourrait créer un certain dilemme. Comment pourriez-vous dire « OK, j'ai exécuté cela une fois ; il ne faut plus l'exécuter » ? Pour modifier cet état global du système, il vous faudrait avoir des privilèges administratifs. Et, de toute évidence, l'utilisateur qui n'est pas administrateur ne dispose pas de privilèges administratifs ! Le programme ne serait plus « à exécution unique » : il serait « à exécution répétée jusqu'à ce qu'un administrateur ouvre une session ».

  (Cliquer sur l'image pour l'agrandir)

RunOnce, qui est destiné à la finalisation d'une installation de programme, est visible lors de l'installation de Windows proprement dite. Lorsque vous essayez d'installer un service pack ou d'effectuer une mise à niveau avec une version plus récente de Windows, l'assistant d'installation vérifie la clé RunOnce. Si elle n'est pas vide, vous obtiendrez un message d'erreur indiquant, « Attention, vous avez encore une installation de programme en cours qui n'est pas terminée. Veuillez la terminer avant d'essayer de mettre à niveau le système d'exploitation ». Quoi de plus normal, vous ne voudriez pas en effet, modifier le système d'exploitation au beau milieu de l'installation d'un programme.

L'ensemble de la structure de RunOnce dit tout sur son passé. Elle était hachée dans Windows 95, un système d'exploitation qui ne faisait pas de distinction entre les administrateurs et les non-administrateurs. Dans la mesure où tous les utilisateurs étaient, de fait, des administrateurs sur Windows 95, un programme d'installation qui utilisait RunOnce pouvait compter sur le fait que les actions RunOnce seraient effectuées lors du redémarrage suivant.

Sur les systèmes d'exploitation Windows plus récents (cela se vérifie particulièrement sur Windows Vista™) il est possible que personne ne disposant de privilèges administrateur ne se connecte pendant des mois. Par conséquent, un programme qui nécessite que RunOnce soit exécuté pourrait se retrouver en attente pendant très, très longtemps.

A ce propos, j'ai vu un RunOnce perpétuel. Il se rajoutait à la clé RunOnce lorsqu'il était exécuté. Cela va clairement à l'opposé de l'objectif de RunOnce, dans la mesure où cela ne fait plus partie de l'installation du programme mais plutôt du fonctionnement normal de ce dernier. De plus, ce comportement fait que l'installation de Windows persiste à signaler qu'une installation est en cours.

Ainsi, l'utilisateur ne peut jamais mettre à niveau le système d'exploitation car ce programme pesky répète à l'envi, « Il me reste encore quelques tâches à effectuer et après j'en aurai vraiment terminé ». Le programme ne terminera pas l'installation aujourd'hui, « mais à coup sûr, ce sera fait demain ». C'est un peu comme dans En attendant Godot, mais sans la crise existentielle, espérons-le.

Raymond Chen, The Old New Thing, dresse un historique de Windows et traite de la programmation Win32. Il prépare actuellement un livre, intitulé, par pure coïncidence, The Old New Thing (Addison-Wesley, 2007).

© 2008 Microsoft Corporation et CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable.