J’essaie de comprendre comment Windows (de XP à 7) gère l’installation et la désinstallation des fichiers MSI. Je me suis retrouvé dans des situations où Windows Installer ne peut pas désinstaller parce qu’il lui manque le fichier MSI original, ce qui me porte à croire qu’il stocke une copie de tous les packages MSI installés quelque part. Où ?
J’ai eu quelques théories.
Il s’attend à ce qu’il se trouve dans le même dossier que celui d’où il a été installé. Les clés de registre dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall pointent vers le dossier d’installation original, et les messages d’erreur quand le fichier MSI est manquant pointent souvent vers cela. Supprimer le fichier MSI de ce dossier ne gêne cependant pas le processus de désinstallation, donc j’ai rejeté cette théorie.
C:\Windows\Installer. Ce dossier contient effectivement un tas de fichiers MSI nommés apparemment de manière aléatoire. Mais cette liste est incomplète. Je trouve des entrées dans la clé de registre mentionnée en 1) qui n’ont pas de copie MSI dans ce dossier.
Alors comment ça fonctionne ? Comment Windows Installer est-il capable de désinstaller des applications installées par MSI même si le MSI n’est ni en 1) ni en 2) ?
Apparemment, ça fonctionne comme ceci (sous Windows 7, je ne sais pas pour XP et les autres systèmes) :
Quand un utilisateur installe une application, Windows fait ce qui suit :
Crée une clé de registre
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall[GUID du ProductId]
pour cette application.
Si vous avez accès au fichier msi original de l’installateur de votre application, vous pouvez trouver le [GUID du ProductID] en ouvrant le fichier msi dans orca.exe et en cliquant sur “Property” à gauche dans orca, et en cherchant la ligne “ProductCode” à droite. Si vous n’avez pas accès au fichier *.msi original, vous pouvez simplement chercher dans la clé de registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall le nom de l’application.
Si vous voulez supprimer votre application (qui refuse de se désinstaller par exemple) de la liste des applications installées dans le Panneau de configuration, vous pouvez supprimer l’entrée de cette clé Uninstall. Elle disparaîtra sûrement de la liste dans le panneau de configuration, mais Windows s’en souviendra toujours. Par exemple, si vous essayez d’installer une version suivante de la même application, l’Installateur peut toujours insister pour désinstaller la version précédente. Voir le point 2 pour cela.
Windows copie le fichier *.msi original dans le dossier C:\Windows\Installer et le renomme avec un nom aléatoire (en gardant l’extension .msi cependant). Windows crée aussi une clé dans le registre dans HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[InternalUserId]\Products\[une séquence aléatoire de caractères similaire à un GUID identifiant votre installation pour Windows]\InstallProperties. Le nom de valeur “LocalPackage” dans cette clé de registre pointera vers le fichier msi renommé. Pour trouver le fichier dans C:\windows\Installer, vous pouvez naviguer vers ce dossier dans l’Explorateur Windows, basculer en vue Détails, rendre la colonne “Sujet” visible et vous verrez pour tous les fichiers nnnnnnnn.msi leur nom de produit correspondant.