Où Windows stocke-t-il les fichiers MSI pour la désinstallation?

25

J'essaie de comprendre comment Windows (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 car il manque le fichier MSI d'origine, ce qui m'amène à croire qu'il stocke une copie de tous les packages MSI installés quelque part. Où?

J'ai eu quelques théories.

  1. 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\Uninstallpointent vers le dossier d'installation d'origine, et les messages d'erreur lorsque le fichier MSI est manquant le signalent souvent. La suppression du fichier MSI de ce dossier n'entrave cependant pas le processus de désinstallation, j'ai donc refusé cette théorie.

  2. C:\Windows\Installer. Ce dossier contient en fait un tas 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 au point 1) qui n'a pas de copie MSI dans ce dossier.

Donc comment ça fonctionne? Comment le programme d'installation de Windows peut-il désinstaller les applications installées sur MSI même si le MSI n'est pas en 1) et pas en 2)?

Nilzor
la source
Windows ne le garde pas toujours. Il existe de nombreuses façons pour l'utilisateur de dire à Windows d'effacer réellement le cache de ces fichiers. Si vous avez un logiciel qui ne peut pas être désinstallé, cela signifie que le développeur a mal construit le programme d'installation. L'emplacement sera différent entre Windows XP (pourquoi vous inquiétez-vous d'un système d'exploitation non pris en charge) et Windows 7 et / ou Windows 8.
Ramhound

Réponses:

44

Apparemment ça marche comme ça (sous Windows 7, je ne connais pas XP et les autres OS):

Lorsqu'un utilisateur installe une application, Windows effectue les opérations suivantes:

1) Crée une clé de registre

HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [GUID ProductId]

pour cette application.

Si vous avez accès au fichier msi d'origine du programme d'installation de votre application, vous pouvez trouver [ProductID GUID] en ouvrant le fichier msi dans orca.exe et en cliquant sur la "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 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 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 prochaine version de la même application, le programme d'installation peut toujours insister pour désinstaller la version précédente. Voir l'article 2 pour cela.

2) Windows copie le fichier * .msi d'origine dans le dossier C: \ Windows \ Installer et le renomme un nom aléatoire (conserve cependant l'extension .msi). Windows crée également une clé dans le Registre dans HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[InternalUserId]\Products\[some random guid-like sequence of chars identifying to windows your installation]\InstallProperties.ValueName "LocalPackage" dans cette clé de Registre pointera 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 dans la vue Détails, rendre la colonne "Objet" visible et vous verrez pour tous les nnnnnnnn.msi leur nom de produit correspondant.

farfareast
la source
6
Je voulais vous voter deux fois pour le secret caché - make column "Subject" visible and you will see for all nnnnnnnn.msi fies their corresponding name of product.. Windows est un système d'exploitation si mystérieux: P
RBT
3) L'étape 3 était nécessaire pour moi. J'ai dû copier le fichier 5188bfc6.msi (hex # .msi) et le renommer en nom de fichier d'origine MyApp.msi, avant que le programme de désinstallation accepte le fichier. Après cette désinstallation, cela a bien fonctionné.
Joe B