Options express :
Désinstallation par GUID du produit : ( trouver le GUID du produit ) - section 3 ci-dessous pour l'enregistrement. Il y a aussi : MSI logging en profondeur ici :
msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
Désinstallation par fichier MSI :
msiexec.exe /x "c:\filename.msi"
Express Interactive :
Right click MSI file in Windows Explorer and select "Uninstall".
Il existe plusieurs façons de désinstaller un package MSI. Celle qui suit est destinée à servir de "référence" :
En résumé vous pouvez désinstaller via : msiexec.exe , ARP , WMI , PowerShell Les systèmes de déploiement tels que SCCM , VBScript / COM Automation, DTF ou via le dossier caché du cache de Windows et quelques autres options présentées ci-dessous.
Les premiers paragraphes fournissent des informations importantes sur le MSI, puis il y a 14 sections avec différentes manières de désinstaller un fichier MSI. Puh.
"Babble, Babble - Over" : Sections 1 , 2 y 3 sont les approches normales de désinstallation (et donc recommandé). Personally I use option 3 or 5 from section 3
(les deux options avec journalisation, mais l'option 5 fonctionne silencieusement également). Si vous êtes très occupé Si vous avez besoin d'aide, passez outre le bavardage et optez pour l'un d'entre eux. et optez pour l'un d'entre eux - il fera l'affaire.
Si vous avez problèmes de désinstallation totale et vous recherchez une alternative à la version obsolète de la norme MsiZap.exe et / ou l'utilitaire de nettoyage de l'installateur Windows ( MSICUU2.exe ), vous pouvez essayer le nouveau Outil FixIt de Microsoft ( ou la page internationale ). Apparemment, cela peut aussi fonctionner pour d'autres problèmes d'installation.
Liste plus récente des méthodes de nettoyage : Nettoyage des désinstallations MSI cassées .
Si vous pensez MSI y Installateur Windows c'est plus de problèmes que ça n'en vaut la peine, vous pourriez vouloir lire l'article les avantages pour l'entreprise d'utiliser des fichiers MSI .
Installscript MSI Les installations sont généralement emballées dans un fichier setup.exe . Pour en savoir plus sur les paramètres à utiliser pour désinstaller de telles configurations, veuillez consulter ces liens : fiche de référence pdf setup.exe , Paramètres de ligne de commande de Setup.exe et Update.exe .
Certains fichiers MSI sont installés dans le cadre de paquets via des mécanismes tels que Brûler (WiX Toolkit) ou Suite InstallShield projets. Cela peut rendre la désinstallation légèrement différente de ce qui est vu ci-dessous. Voici un exemple pour les projets InstallShield Suite .
Sachez que l'exécution de la désinstallation en silence o de manière interactive peut entraîner des résultats différents ( !) . Pour une description assez longue de la raison pour laquelle c'est le cas, veuillez lire ce billet : La désinstallation à partir du panneau de configuration est différente de la désinstallation à partir de .msi.
Si le support d'installation d'origine vous est demandé de manière inattendue lorsque vous essayez de désinstaller, veuillez lire cette réponse : Pourquoi MSI a-t-il besoin du fichier .msi d'origine pour procéder à une désinstallation ? et peut-être aussi la section 12 ci-dessous pour certains détails techniques importants.
Si vous avez CCleaner ou des outils de nettoyage similaires installés, passez peut-être à article 11 .
Si la désinstallation échoue complètement (impossible à exécuter), voir les sections 12 et 13 ci-dessous. pour un moyen potentiel de " annuler " l'installation en utilisant restauration du système et / ou des outils de nettoyage.
1 - Using the original MSI
- Si vous avez accès au MSI original utilisé pour l'installation, vous pouvez simplement clic droit il en Explorateur Windows et sélectionnez Désinstaller .
- Vous pouvez également désinstaller via la ligne de commande comme expliqué dans la section 3.
2 - Using the old ARP Applet OR new Windows 8/10 Settings Interface
-
Il faut juste mentionner la ou les approches normales, même si elles sont évidentes.
-
ARP
= Add / Remove Programs Applet
( appwiz.cpl
)
-
Windows 10 Settings Interface
=> Nouveau shell pour la même opération
-
ARP :
- Allez sur commencer exécuter appwiz.cpl ENTER afin d'ouvrir l'applet d'ajout/suppression de programmes (ou cliquez sur ajout/suppression de programmes dans le panneau de configuration)
- Cliquez " Retirer "pour le produit que vous voulez désinstaller
-
Interface des paramètres (Windows 8 / 10) :
- Utiliser la nouvelle interface graphique des paramètres dans Windows 8 / 10
-
Windows Key + Robinet I =>
Apps & Features
. Sélectionnez l'entrée et désinstallez.
- Raccourci direct :
-
Windows Key + Robinet R => Type :
ms-settings:appsfeatures
et appuyez sur Enter
- Certains rapports font état d'erreurs lors de l'invocation de la désinstallation de cette manière. Veuillez ajouter des commentaires ci-dessous si vous en avez vu.
3 - Using msiexec.exe command line (directly or via a batch file)
- Vous pouvez désinstaller via le invite de commande ( cmd.exe ), fichier de lots ou même à partir d'un exécutable en tant que fonctionnement de l'obus .
- Pour ce faire, il suffit de transmettre le GUID du produit (voir ci-dessous pour savoir comment trouver cette GUID ) ou le chemin d'accès au fichier MSI d'origine, s'il est disponible, à l'adresse suivante msiexec.exe .
- Pour toutes les lignes de commande ci-dessous, vous pouvez ajouter
/qn
a faire en sorte que la désinstallation s'exécute en mode silencieux . C'est ainsi qu'une désinstallation s'exécute lorsqu'elle est déclenchée par l'applet d'ajout/suppression.
Option 3.1 : Désinstallation interactive de base (accès au fichier MSI original) :
msiexec.exe /x "c:\filename.msi"
Option 3.2 : Désinstallation interactive de base via le GUID du produit (pas d'accès au fichier MSI original - Voici comment trouver le GUID du produit - même lien que ci-dessous) :
msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
Option 3.3 : Désinstallation interactive avec fichier journal verbeux :
msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
Option 3.4 : Désinstallation interactive avec un fichier journal détaillé. ( option verbose, flush to log - écrire le journal en continu, peut être très lent) :
msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
-
L'option "flush to log" rend la désinstallation lente. car le fichier journal est écrit en continu et non par lots. Cela garantit qu'aucun tampon de journal n'est perdu en cas de panne de l'installation.
-
En d'autres termes, Activez cette option si votre installation se bloque et qu'il n'y a pas d'informations utiles dans votre fichier journal détaillé. . Enlevez le point d'exclamation pour désactiver l'option "flush to log" et la désinstallation sera beaucoup plus rapide. Vous obtiendrez toujours une journalisation détaillée, mais, comme indiqué, une partie du tampon de journalisation pourrait être perdue.
Option 3.5 (recommandée) : Désinstallation silencieuse avec fichier journal verbeux - supprimer les redémarrages (pas de vidage du journal - voir l'option précédente pour savoir ce que cela signifie) :
msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=R
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=R
Explication rapide des paramètres (puisque je recommande cette option) :
/X = run uninstall sequence
/QN = run completely silently
/L*V "C:\msilog.log"= verbose logging at path specified
{11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
REBOOT=R = prevent unexpected reboot of computer
Encore une fois, comment trouver le guide du produit : Comment puis-je trouver le GUID du produit d'un setup MSI installé ? (pour la désinstallation si vous n'avez pas le MSI original à spécifier dans la commande de désinstallation).
4 - Using the cached MSI database in the super hidden cache folder
- MSI supprime tous les cabs (anciennes versions de Windows) et met en cache chaque MSI installé dans un dossier système super caché à l'adresse suivante %SystemRoot \Installer (vous devez afficher les fichiers cachés pour le voir).
-
NB : Ce dossier supper-caché est maintenant traité différemment à partir de Windows 7. Les fichiers MSI sont désormais mis en cache en taille réelle. . Lisez le fil de discussion lié pour plus de détails - lecture recommandée pour tous ceux qui trouvent cette réponse et jouent avec les paramètres dangereux de Windows.
-
Évitez ces énormes fichiers en cache en utilisant les installations d'administration. . Au sujet de l'espace disque : Comment puis-je me débarrasser des énormes fichiers MSI mis en cache (et autres astuces de nettoyage de l'espace disque) ? .
- Tous les fichiers MSI ici auront un nom aléatoire (format hexadécimal) attribué, mais vous pouvez obtenir des informations sur chaque MSI en affichant la barre d'état de l'Explorateur Windows (View -> Status Bar) et en sélectionnant ensuite un MSI. Le flux résumé de la MSI sera visible en bas de la fenêtre de l'Explorateur Windows. Ou, comme le souligne Christopher Galpin, activez la colonne "Commentaires" dans l'Explorateur Windows et sélectionnez le fichier MSI ( voir cet article pour savoir comment faire ).
- Réponse courte sur l'utilisation de l'Explorateur Windows
- Une fois que vous avez trouvé le bon MSI, faites un clic droit dessus et allez dans Désinstaller.
- Vous pouvez également utiliser PowerShell pour afficher le chemin complet du paquet mis en cache localement ainsi que le nom du produit. C'est l'option la plus simple à mon avis.
-
Pour mettre le feu PowerShell : Maintenez la touche Windows enfoncée, tapez sur R, relâchez la touche Windows, tapez "powershell" et appuyez sur OK. . Ensuite, maximiser la fenêtre PowerShell et exécutez la commande ci-dessous :
get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize
-
Il y a un script disponible sur MSDN . Il permet d'exécuter la désinstallation sur plusieurs machines.
-
Entrée ajoutée par Even Mien :
$app = Get-WmiObject -Class Win32_Product -Filter "Name = 'YOUR_APP'"
$app.Uninstall()
-
Cette approche fonctionnera, mais l'accès à la classe WMI Win32_Product déclenchera un contrôle de cohérence du logiciel que es très lent et dans des circonstances particulières, il peut provoquer le déclenchement d'une auto-réparation MSI. Voir cet article : Powershell Uninstall script - Avoir un vrai mal de tête
-
Je ne l'ai pas testé moi-même, mais il semble que $app.Uninstall() puisse exécuter le UninstallString enregistré dans les paramètres du registre de l'applet ARP. Cela signifie qu'elle peut exécuter modify au lieu de uninstall dans certains cas.
-
Consultez cette rubrique pour plus de détails et pour savoir comment désinstaller via Powershell : Comment désinstaller une application à l'aide de PowerShell ?
6 - Using the .NET DTF Class Library
(partie de la boîte à outils WiX )
-
Cette option est incluse pour les développeurs qui se lancent dans le déploiement et les MSI. - il n'est pas vraiment pratique en tant que "solution rapide". Elle nécessite que vous téléchargiez la boîte à outils WiX - un cadre gratuit pour la création de fichiers MSI compilés à partir de fichiers sources XML.
-
Une brève description de WiX et de son "histoire" : Windows Installer et la création de WiX . Et voici WiX comparé à d'autres outils de déploiement (commerciaux) - (forces et faiblesses - en espérant qu'elles soient aussi objectives que possible).
-
DTF (Deployment Tools Foundation) est distribué en tant que partie de WiX comme expliqué ici : Le code source de Deployment Tools Foundation est-il disponible ? .
-
Le DTF est essentiellement un wrapper .NET pour l'API Win32 Windows Installer . Il élimine tout besoin d'interopérabilité COM lorsque l'on travaille avec Windows Installer via l'automatisation et n'est rien d'autre qu'une véritable révolution. Le joyau .NET - peut-être la bibliothèque .NET la plus facile à utiliser que j'aie jamais vue. Hautement recommandé - idéal même pour former des étudiants en C#. .
-
Les éléments suivants fuente de l'expert MSI Christopher Painter en utilisant C# et DTF. Microsoft.Deployment.WindowsInstaller est l'un des assemblages DTF. Voir les autres assemblages expliqués ici sur serverfault.com :
using Microsoft.Deployment.WindowsInstaller;
public static void Uninstall( string productCode)
{
Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
}
-
Une autre alternative de Tom Blodget : Vérification de la réussite de la désinstallation
-
Plus d'informations sur msiexec.exe contre automatisation sur : serverfault.com .
- Une mise à niveau majeure de Windows Installer peut se produire dans le cadre de l'installation d'un autre fichier MSI.
- Une mise à niveau majeure est réalisée en identifiant les produits connexes dans la section " Table de mise à niveau ". Ces configurations connexes sont ensuite traitées comme indiqué dans le tableau. Généralement, cela signifie qu'ils sont désinstallés, mais la configuration principale peut également être interrompue à la place (généralement utilisé pour détecter les versions supérieures de votre propre application présente sur la boîte).
9 - Using Deployment Systems / Remote Administration Systems
-
SCCM , CA Unicenter , Tivoli d'IBM , Altiris Client Management Suite, et plusieurs autres
- Ces outils permettent une gestion avancée des PC clients, notamment l'installation et la désinstallation de fichiers MSI.
- Ces outils semblent utiliser une combinaison de msiexec.exe, d'automatisation, WMI etc... et même leur propre façon d'invoquer les installations et désinstallations.
- D'après mon expérience, ces outils ont beaucoup de "personnalité" et vous devez vous adapter à leurs différentes façons de faire.
10 - Using WMI - Windows Management Instrumentation
- Je l'ajoute juste pour être complet. Il est non recommandé d'utiliser cette approche car elle est très lent
- El WMICodeCreator.exe l'outil de création de code peut être utilisé pour expérimenter
- L'installation peut être invoquée via
Win32_Product.Install
- La désinstallation peut être invoquée via
Win32_Product.Uninstall
- Echantillon MSDN : Méthode de désinstallation de la classe Win32_Product
11 - Using a third-party tool such as
ccleaner
or similar
- Plusieurs applications Windows disposent de leur propre interface pour désinstaller non seulement les paquets MSI, mais aussi les anciens installateurs.
- Je ne veux pas faire de recommandations d'outils spécifiques ici (en particulier les outils commerciaux), mais le bien connu CCleaner dispose d'une telle interface de désinstallation (et il a une version gratuite). Je dois également ajouter que cet outil a subi une attaque de malware récemment .
- Je suppose que nous devrions tous nous rappeler que même les logiciels inoffensifs peuvent être injectés avec des logiciels malveillants dans leurs emplacements de téléchargement (attaque FTP).
- J'utilise virustotal.com pour vérifier mes téléchargements, et aussi Sysinternals Process Explorer pour vérifier les processus en cours d'exécution après l'installation - ainsi que les logiciels de sécurité habituels (selon les disponibilités).
- Une quantité surprenante de logiciels de la "zone grise" est généralement trouvée avec cette approche (barres d'outils, smileys, logiciels publicitaires, etc...), ainsi que plusieurs faux positifs (ils peuvent également causer des problèmes car les logiciels de sécurité bloquent leur accès ou les mettent en quarantaine, ce qui crée beaucoup de flou). Et certainement aussi de vrais logiciels malveillants.
-
Vous trouverez ici quelques conseils d'utilisation de Process Explorer. - une série de tweets - cet outil de Process Explorer se connecte à VirusTotal.com pour vérifier tous les processus en cours de manière interactive - il suffit de quelques étapes de configuration.
- Je dois noter que Process Explorer permet une vérification de la signature des fichiers, mais pas d'heuristique - pour autant que je sache (pas de vérification des opérations suspectes, juste une vérification avec plus de 60 suites de sécurité pour les fichiers signalés). Vous avez besoin d'un outil de sécurité ordinaire pour une protection heuristique interactive et en ligne.
- Pour ce que ça vaut, je pense que certains logiciels de sécurité causent plus de problèmes de faux positifs que de dégâts causés par les logiciels malveillants. Dernières paroles célèbres à l'ère des rançongiciels...
- C'est une digression assez importante - je ne veux simplement pas voir les gens télécharger des logiciels malveillants. Faites votre virustotal.com vérifier au moins.
- Désinstaller de cette façon devrait fonctionner correctement. Je pense que ces outils gâchent trop de choses lorsque vous essayez leurs "fonctions de nettoyage". A utiliser avec précaution. Si vous n'utilisez que la fonction de désinstallation, ça devrait aller.
12 - Using a cleanup tool such as
msizap
or similar
- Pour être complet
msizap.exe Il convient de mentionner qu'il est déprécié , non pris en charge y obsolète . Il ne doit pas être utilisé sur les versions plus récentes de Windows.
- Cet outil en ligne de commande (
msizap.exe ) disposait également d'une interface graphique ( MSICUU2.exe ). Les deux outils sont déprogrammés.
- L'utilisation de ces outils visait à nettoyer les désinstallations défaillantes :
- Généralement, pour les rares cas où le MSI en cache avec le nom aléatoire est absent par erreur et la désinstallation échoue pour cette raison en demandant le MSI d'origine. C'est un problème rare, mais je l'ai vu moi-même. Voici quelques causes potentielles : Déplacé vers cette réponse .
- Mots clés : interférence de la restauration du système, mauvaises applications de nettoyage, plantage de msiexec.exe, panne de courant, interférence des logiciels de sécurité, erreurs de débogage du développement MSI (codes de paquets identiques, etc...), bricolage et piratage de l'utilisateur (qu'y a-t-il là-dedans ? économiser de l'espace ?), etc...
- Il peut également être utilisé pour supprimer toute installation MSI, bien que cela ne soit évidemment pas recommandé.
- Plus d'informations : Pourquoi MSI a-t-il besoin du fichier .msi d'origine pour procéder à une désinstallation ?
-
Ce nouvel outil de soutien (cet outil est maintenant aussi déprécié) peut être essayé sur les versions récentes de Windows si vous avez des paquets MSI défectueux à désinstaller.
- Certains ont suggéré d'utiliser l'outil dont le lien est indiqué ici par saschabeaumont : Désinstallation sans fichier MSI . Si vous l'essayez et que cela fonctionne, n'hésitez pas à nous le faire savoir.
- Si vous avez accès au MSI original qui a été utilisé pour installer le produit, vous pouvez l'utiliser pour exécuter la désinstallation. Il doit s'agir du MSI exact qui a été utilisé, et non d'un MSI similaire.
13 - Using
system restore
("installation undo" - last resort IMHO)
- Il ne s'agit pas à proprement parler d'un moyen de " désinstaller "mais à " annuler " la dernière installation, ou plusieurs installations d'ailleurs.
- La restauration par le biais d'un point de restauration ramène le système à une état de l'installation précédente (vous pouvez trouver des démonstrations vidéo sur YouTube ou un site similaire).
- Notez que la fonctionnalité peut être désactivée entièrement ou partiellement - il est possible de la désactiver de façon permanente pour toute la machine, ou adhoc par installation.
-
J'ai vu de nouveaux problèmes d'installation insolubles résultant d'une restauration du système, mais normalement cela fonctionne bien. . Évidemment, n'utilisez pas cette fonction pour vous amuser. C'est un dernier recours et il est préférable de l'utiliser pour retour en arrière des nouveaux pilotes ou des configurations qui viennent d'être installées et dont on constate qu'elles posent des problèmes immédiats ( écran bleu , redémarrages, instabilité, etc...).
- Plus le délai est long, plus vous vous créez des retouches et plus le risque est élevé. La plupart des systèmes ne comportent que quelques points de restauration, et la plupart d'entre eux ne remontent qu'à un mois ou deux, je crois.
- Sachez que la restauration du système peut affecter Mises à jour de Windows qui doivent ensuite être réappliqués - ainsi que de nombreux autres paramètres du système. Au-delà du simple désagrément, cela peut également faire resurgir des problèmes de sécurité et vous pourriez vouloir effectuer un contrôle de sécurité spécifique sur le(s) boîtier(s) cible(s) à l'aide de Analyseur de sécurité Microsoft Baseline ou des outils similaires.
- Puisque j'ai mentionné la restauration du système, je suppose que je devrais mentionner la fonction de la dernière bonne configuration connue . Cette fonction n'a rien à voir avec la désinstallation ou la restauration du système, mais il s'agit de la dernière configuration de démarrage qui a fonctionné ou qui a permis de faire fonctionner le système. Elle peut être utilisée pour remettre votre système en marche s'il affiche un écran bleu ou s'arrête pendant le démarrage. Cela se produit souvent après l'installation de pilotes.
14 - Windows Installer Functions (C++)
Pour être complet, je pense que nous devrions mentionner l'élément central de tout cela - la méthode "down-to-the-metal" : les fonctions de l'API Win32 de l'installateur Windows . Ce sont probablement les fonctions utilisées par la plupart, sinon la totalité, des autres approches énumérées ci-dessus "sous le capot". Elles sont principalement utilisées par les applications ou les solutions qui traitent directement avec MSI en tant que technologie.
Il y a une réponse sur serverfault.com qui peut être intéressante car un résumé des différentes approches programmatiques de la désinstallation (fonctions d'automatisation COM, .NET, Win32).
Vous trouverez ci-dessous un extrait C++ montrant comment désinstaller Orca, 10.1.17134.12
par le code produit en utilisant un appel à la Fonction MsiConfigureProductEx . Pour désinstaller un autre produit, remplacez le GUID spécifié pour prodcode
avec celui de votre produit. Pour trouver le code produit, voir cette réponse : Comment puis-je trouver le GUID du produit d'un setup MSI installé ?
La désinstallation se fera en mode GUI complet. Pour fonctionner en mode silencieux ou dans un autre mode GUI (réduit, basique, etc...), veuillez consulter le : Fonction MsiSetInternalUI .
#include "pch.h"
#define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
#include <windows.h>
#include <msi.h> // Windows Installer
#include <tchar.h>
#pragma comment(lib, "msi.lib") // To make code link
int main()
{
const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12
UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot);
return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx
}
Le snippet a été réalisé et testé avec la dernière version de Visual Studio 2017 à partir de septembre 2018 :
-
Créez une nouvelle "Application Console Windows" à partir de Visual C++ => Bureau Windows.
-
Copiez et collez le code ci-dessus dans votre fichier CPP principal (en remplaçant ce qui s'y trouve).
-
Cela devrait être suffisant pour pouvoir exécuter le code. Peut-être mettre un point d'arrêt, construire et exécuter.
4 votes
Pourquoi voulez-vous faire ça ? Je suis juste curieux...
0 votes
Comme expliqué ci-dessous, vous pouvez en fait utiliser l'api Windows Installer Automation via un VBScript, mais il se peut qu'il appelle msiexec.exe sous le capot pour ce que j'en sais (mais il semble qu'il appelle directement msi.dll).
1 votes
Je dirais que cette question entre dans le cadre d'un "problème pratique, auquel il est possible de répondre et qui est propre au développement de logiciels" et devrait donc être rouverte.
0 votes
Il semble qu'il serait utilisé dans le cadre d'un test/CI. Pour moi, c'est entièrement lié à la programmation. En fait, j'ai des logiciels dont je dois tester les installateurs et aussi les désinstallateurs.
0 votes
Il vaut la peine de vérifier s'il y a un programme de désinstallation pour l'application dans les fichiers du programme - même si vous avez installé en utilisant un msi, il peut avoir extrait un exécutable de désinstallation.