J'essaie de comprendre comment Windows (XP à 7) gère l'installation et la désinstallation de fichiers MSI. Je suis arrivé dans des situations où Windows Installer est incapable de désinstaller car il manque le fichier MSI d'origine, ce qui me laisse penser 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 réside dans le même dossier à partir duquel il a été installé. Les clés de registre dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
pointent vers le dossier d'installation d'origine et les messages d'erreur lorsque le fichier MSI est manquant y font souvent référence. Supprimer le fichier MSI de ce dossier n'empêche pas le processus de désinstallation, j'ai donc refusé cette théorie.
C:\Windows\Installer
. Ce dossier contient en fait un groupe de fichiers MSI apparemment nommés 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.
Donc comment ça fonctionne? Comment le programme d'installation Windows peut-il désinstaller les applications installées par MSI même si le MSI n'est pas en 1) et pas en 2)?
Apparemment, cela fonctionne comme ceci (sur Windows 7, je ne connais pas XP et d'autres systèmes d'exploitation):
Lorsqu'un utilisateur installe une application, Windows procède comme suit:
1) Crée une clé de registre
HKLM\LOGICIEL\Microsoft\Windows\CurrentVersion\Uninstall\[GUID de ProductId]
pour cette application.
Si vous avez accès au fichier msi d'origine de l'installateur de votre application, vous pouvez trouver [ProductID GUID] en ouvrant le fichier msi dans orca.exe et en cliquant sur "Propriété" à gauche dans orca et en recherchant "ProductCode". ligne à droite. Si vous n'avez pas accès au fichier * .msi d'origine, vous pouvez simplement rechercher la clé de registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall pour connaître le nom de l'application.
Si vous souhaitez supprimer votre application (qui refuse de 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é de désinstallation. Il va sûrement disparaître de la liste du panneau de configuration, mais Windows s'en souviendra toujours. Par exemple, si vous essayez d'installer une prochaine version de la même application, le programme d'installation peut toujours exiger la désinstallation de la version précédente. Voir le point 2 pour cela.
2) Windows copie le fichier * .msi d'origine dans le dossier C:\Windows\Installer et le renomme en un nom aléatoire (conserve toutefois l'extension .msi). Windows crée également une clé dans la base de registre dans HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[InternalUserId]\Products\[some random guid-like sequence of chars identifying to windows your installation]\InstallProperties.
NomName "LocalPackage" dans cette clé de registre pointe vers le fichier msi renommé. Pour trouver le fichier dans C:\windows\Installer, vous pouvez accéder à ce dossier dans l'Explorateur Windows, le basculer en vue Détails, rendre la colonne "Objet" visible et vous verrez pour nnnnnnnnn.msi leur nom de produit correspondant.