La vie secrète de WindowsFichiers partagés

Raymond Chen

Vous êtes-vous jamais demandé pourquoi, lorsque vous désinstallez un programme, Windows® vous demande s'il doit supprimer un fichier dont la suppression « risque d'empêcher d'autres applications de s'exécuter correctement » ? Tout d'abord, ce message (illustré par la capture d'écran) ne vient pas de Windows mais du programme de désinstallation. La bonne question à poser est donc : « Pourquoi le programme de désinstallation de l'application affiche-t-il cette boîte de dialogue » ? En d'autres termes, une question à laquelle un utilisateur ne peut pas répondre ! Comment en sommes-nous arrivés là ?

Pour gérer les comptes de référence des fichiers utilisés par plusieurs applications (par exemple les bibliothèques de service d'exécution MFC qui sont utilisées par plusieurs programmes qui n'ont aucun rapport entre eux), le programme d'installation crée une entrée sous la clé de registre SharedDLLs. Cette entrée montre le fichier et son compte de référence. Si une entrée pour le fichier existe déjà, le compte de référence est incrémenté. Si cette entrée n'existe pas encore, le compte de référence est défini sur un. Réciproquement, lorsque le programme est désinstallé, le compte de référence est décrémenté et lorsqu'il arrive à 0, le fichier est supprimé parce qu'il n'y a plus de programme qui l'utilise. Du moins, c'était la théorie.

Devrais-je le supprimer ou pas ?

Devrais-je le supprimer ou pas ?  (Cliquer sur l'image pour l'agrandir)

L'un des problèmes liés à ce modèle est qu'il suppose que tout le monde suit les mêmes règles. Mais il est très difficile de résister à la tentation de tricher puisqu'une telle action n'a aucune conséquence sur le tricheur.

Par exemple, supposons qu'il existe un programme qui utilise les bibliothèques de service d'exécution MFC dont le programme d'installation copie tout simplement ces bibliothèques dans le répertoire du système sans mettre à jour le compte de référence. Dans ce cas, lorsque ce programme est désinstallé, il ne fait que supprimer les bibliothèques. Considérons maintenant ce qui se produit lorsque ce programme tente de coexister avec un programme qui suit les règles. En gros, voici ce qui se passe :

  1. Installation du bon programme : les bibliothèques sont installées et le compte de référence est défini sur 1.
  2. Installation du mauvais programme : les bibliothèques sont installées mais le compte de référence reste inchangé.
  3. Désinstallation du mauvais programme : les bibliothèques sont supprimées.

Le résultat est que le bon programme s'arrête de fonctionner puisque les bibliothèques n'existent plus.

Voici un autre scénario :

  1. Installation du bon programme : les bibliothèques sont installées et le compte de référence est défini sur 1.
  2. Installation du mauvais programme : les bibliothèques sont installées mais le compte de référence est inchangé.
  3. Désinstallation du bon programme : le compte de référence atteint zéro et les bibliothèques sont supprimées.

Le résultat de ce scénario est que le mauvais programme s'arrête de fonctionner.

Les personnes qui ont écrit le bon programme on dû penser : « Bon, nous ne pouvons pas empêcher le mauvais programme de nous affecter, mais au moins nous pouvons essayer de ne pas affecter le mauvais programme ». Ainsi, juste avant de supprimer un fichier, ils s'arrêtent et affichent un message d'avertissement, « Ben voilà, je suis sur le point de supprimer un fichier. C'est d'accord ? S'il existe quelque part un mauvais programme qui utilise toujours ce fichier, ce mauvais programme sera affecté. Si vous avez un mauvais programme, vous devriez cliquer sur Ne pas supprimer ». Ce ne sont pas là les termes exacts, mais vous savez à quoi je fais référence. Même le célèbre Jeffrey Richter a recommandé cette approche dans un article du Microsoft Systems Journal de 1996.

En suivant cette méthode, l'utilisateur se retrouve malheureusement face à une question à laquelle il n'a aucune chance de répondre correctement.

Bien sûr, tous ceux qui adorent les commandes de confirmation Windows qui leur donnent la possibilité d'annuler chaque action avant son exécution devraient applaudir cette boîte de dialogue. Les programmes de désinstallation vous donnent un contrôle fichier par fichier du processus de désinstallation. Faites donc attention à ce que vous demandez. Vous risquez fort de l'obtenir !

Raymond Chen, The Old New Thing, et son livre du même titre traitent de l’historique de Windows et de la programmation Win32. Il se demande si la fusion nucléaire deviendra réalité avant sa mort.

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