Désinstallation d'un fichier MSI à partir de la ligne de commande sans utiliser msiexec

msiexec est un logiciel d'invite de commande qui installe un programme MSI . Mais j'ai trouvé que vous pouvez installer un fichier MSI à partir de la ligne de commande en tapant simplement le nom du fichier MSI sur la ligne de commande.

mais pour désinstaller le fichier MSI, il semble que vous devez appeler le programme msiexec et lui donner un /x ou /uninstall .

Comment puis-je désinstaller un MSI à partir de la ligne de commande sans en utilisant la routine msiexec ?

47
demandé sur Stein Åsmul 2009-01-16 13:37:02

7 réponses

réponse Courte: vous ne pouvez pas. Utilisation MSIEXEC /x

longue réponse: lorsque vous lancez le fichier MSI directement à la ligne de commande, Tout ce qui se passe est QU'il exécute MSIEXEC pour vous. Cette association est stockée dans le registre. Vous pouvez voir une liste des associations par (dans L'Explorateur de Windows) allant aux outils / Options de dossier / Types de fichier.

Par exemple, vous pouvez exécuter une .DOC à partir de la ligne de commande, et WordPad ou WinWord l'ouvrira pour vous.

si vous regardez dans le Registre sous HKEY_CLASSES_ROOT\.msi , vous verrez ça .Les fichiers MSI sont associés avec le Progide "MSI.Paquet." Si vous regardez dans HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command , vous verrez que la ligne de commande Windows utilise lorsque vous "exécuter".Le fichier MSI.

44
répondu Roger Lipscombe 2009-01-16 10:46:17

il y a de nombreuses façons de désinstaller un paquet MSI. C'est une "référence".

en résumé vous pouvez désinstaller via: msiexec.exe , ARP , WMI , PowerShell , systèmes de déploiement tels que SCCM , VBScript / com Automation, DTF , ou via dossier cache caché de Windows , et quelques autres options présentées ci-dessous.

les premiers paragraphes fournissent des tidbits MSI importants, puis il y a 14 sections avec différentes façons de désinstaller un fichier MSI. Pa.

Sections 1 , 2 et 3 sont les désinstallation normale approches (et donc recommandé). Personnellement, j'utilise l'option 3 ou 5 de la section 3 (les deux options avec journalisation, mais l'option 5 s'exécute aussi silencieusement). Si vous êtes très occupé , passer tous les bavardages et aller pour l'un de ces - il fera le travail.


si vous avez problèmes de désinstallation tout à fait et sont à la recherche d'une alternative à l'déprécié MsiZap.exe et / ou Windows Installer CleanUp Utility ( MSICUU2.exe ), vous pouvez essayer le nouvel outil FixIt de Microsoft ( ou la page internationale ). Peut apparemment fonctionner pour d'autres problèmes d'installation ainsi.


Si vous pensez que MSI et Windows Installer est plus de trouble qu' il est intéressant, vous pourriez vouloir lire à propos de les avantages pour l'entreprise de l'utilisation des fichiers MSI .


les configurations MSI D'Installscript sont généralement enveloppées dans une configuration .dossier exe . Pour en savoir plus sur les paramètres à utiliser pour désinstaller de telles configurations, veuillez consulter les liens suivants: setup.exe pdf fiche de référence , installation.exe et mise à jour.paramètres de la ligne de commande exe .


certains fichiers MSI sont installés dans le cadre de bundles via un mécanisme tel que Burn (Wix Toolkit) ou InstallShield Suite projets. Cela peut faire désinstaller légèrement différent de ce qui est voir ci-dessous. Voici un exemple pour les projets de suite D'InstallShield .


soyez conscient que l'exécution de désinstaller silencieusement ou de façon interactive peut causer des résultats différents (!) . Pour une description plutôt longue des raisons pour lesquelles c'est le cas, veuillez lire ce post: désinstaller à partir du Panneau de configuration est différent de retirer de .msi


si vous êtes inopinément demandé pour le support d'installation original en essayant de désinstaller, s'il vous plaît lire cette réponse: pourquoi MSI nécessite l'original .le fichier msi de procéder à une désinstallation? et peut-être aussi la section 12 ci-dessous pour quelques détails techniques importants.


Si vous avez des CCleaner ou des outils de nettoyage similaires installés, peut-être passer à section 11 .


si la désinstallation est un échec total (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. En utilisant le original MSI

  • si vous avez accès au MSI original utilisé pour l'installation, vous pouvez simplement clic droit it dans Windows Explorer et sélectionner Uninstall .
  • vous pouvez également désinstaller via la ligne de commande comme expliqué dans la section 3.

2. En utilisant le ARP (Add/Remove Programs) Applet

  • nous venons de mentionner l'approche normale si elle est évidente
  • Go démarrer exécuter appwiz.cpl entrer pour ouvrir l'ajout/suppression de programmes applet (ou cliquez sur ajout/ suppression de programmes dans le panneau de contrôle)
  • , Cliquez sur Supprimer " pour le produit que vous souhaitez désinstaller.

3. En utilisant msiexec.exe ligne de commande (directement ou par l'intermédiaire d'un fichier séquentiel)

  • vous pouvez désinstaller via l'invite de commande ( cmd.exe ), fichier de commandes ou ou même à partir d'un exécutable comme un shell opération .
  • vous faites cela en passant le product GUID (cochez ci-dessous pour savoir comment trouver ce GUID ) ou le chemin vers le fichier MSI original, si disponible, à msiexec.exe .
  • Pour toutes les lignes de commande ci-dessous, vous pouvez ajouter /qn à exécuter la désinstallation en mode silencieux . C'est ainsi qu'une désinstallation s'exécute lorsqu'elle est déclenchée à partir de l'applet add/remove.

    • Option 1: désinstallation interactive de base (accès au fichier MSI original)):

       msiexec.exe /x "c:\filename.msi"
      
    • Option 2: désinstallation interactive de base via le produit GUID (pas d'accès à l'original MSI file - voici comment trouver le produit GUID - même lien que ci-dessous):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • Option 3: désinstallation Interactive avec le fichier de log verbose :

       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 4: désinstallation Interactive avec le fichier de log ( verbose, option de log" - journal d'écriture 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 parce que le fichier log est écrit en continu plutôt que par lots. Cela garantit qu'aucun tampon de journalisation n'est perdu si le setup tombe en panne.

      • en d'autres termes, activez cette option si votre installation est en panne et qu'il n'y a pas de informations dans votre fichier journal . Retirez le point d'exclamation pour désactiver l'option flush to log et la désinstallation sera beaucoup plus rapide. Vous obtenez toujours la journalisation verbeuse, mais comme indiqué un tampon de journalisation pourrait être perdu.

    • Option 5 (recommandée): Silent uninstall with verbose log file - suppress reboots (no flush to log - voir l'option précédente pour 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 produit guid: Comment puis-je trouver le produit GUID d'une installation MSI installée? (pour désinstaller si vous n'avez pas le MSI original à spécifier dans la commande Désinstaller).

  • tip Top : Si vous créez un fichier journal pour votre désinstallation, vous pouvez localiser des problèmes dans le journal par recherche de "valeur 3" . Ceci est particulièrement utile pour les fichiers verbeux, car ils sont si, bien, verbeux: -).

  • Comment trouver le produit guide pour un Msi installé ?

  • plus d'information sur l'enregistrement de installsite.org : comment créer un fichier journal de mon installation ? - grande vue d'ensemble des différentes options et des spécificités de la journalisation de L'installation.

  • Msiexec (options de ligne de commande) -aperçu de la ligne de commande pour msiexec.exe de MSDN . Voici la version Technet .

4. En utilisant la base de données MSI mise en cache dans le dossier Super hidden cache

  • MSI supprime tous les cabs (anciennes versions de Windows) et Cache chaque MSI installé dans un dossier système super-caché à %SystemRoot%\Installer (vous devez montrer les fichiers cachés pour le voir).
  • NB : ce dossier caché est traitement différent à partir de Windows 7. les fichiers MSI sont maintenant mis en cache . Lire le fil lié pour plus de détails - recommandé pour quiconque trouve cette réponse et bricoler avec les paramètres de fenêtres dangereuses.
  • tous les fichiers MSI ici auront un nom aléatoire (format hex) assigné, mais vous pouvez obtenir des informations sur chaque MSI en montrant la barre D'État de L'Explorateur Windows (vue -> barre D'état) et en sélectionnant ensuite un MSI. Le le flux de résumé du MSI sera visible au bas de la fenêtre de Windows Explorer. Ou comme Christopher Galpin le souligne, ouvrez la colonne" Commentaires "dans Windows Explorer et sélectionnez le fichier MSI ( voir cet article pour savoir comment faire ce ).
  • une fois que vous avez trouvé le bon MSI, juste le clic droit et aller désinstaller.
  • vous pouvez également utiliser PowerShell pour afficher le chemin complet vers la mise en cache locale forfait ainsi que le nom du produit. C'est l'option la plus simple à mon avis.
  • Au feu PowerShell : maintenez la touche Windows enfoncée, appuyez sur R, relâchez la touche Windows, tapez "powershell" et appuyez sur OK . Puis maximiser la fenêtre PowerShell et exécuter la commande ci-dessous:
    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Enter image description here


5. En Utilisant PowerShell


6. En utilisant le .NET DTF Class Library (partie de the WiX toolkit )

    using Microsoft.Deployment.WindowsInstaller;

    public static void Uninstall( string productCode)
    {
      Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
    }

7. En utilisant le Windows Installer Automation API


8. En utilisant un Windows Installer mise à niveau majeure

  • une mise à niveau majeure de Windows installateur peut se produire dans le cadre de l'installation d'un autre fichier MSI.
  • une mise à niveau majeure est rédigé en identifiant les produits connexes dans le MSI " table de mise à niveau ". Ils liées configurations sont alors traitées comme spécifié dans le tableau. En général, cela signifie qu'ils sont désinstallés, mais la configuration principale peut également être avortée à la place (généralement utilisé pour détecter les versions supérieures de votre propre application présente sur la boîte).

9. En utilisant un système de déploiement avancé / système D'administration À Distance

  • SCCM , CA Unicenter , Tivoli D'IBM , Altiris Client Management Suite, and several others
  • ces outils disposent de la gestion avancée de PC client, et cela comprend l'installation et la désinstallation des fichiers MSI
  • Ces outils semblent utiliser une combinaison de msiexec.exe, de l'automatisation, WMI , etc... et même leur propre façon d'invoquer installe et désinstaller.
  • d'après mon expérience, ces outils ont beaucoup de" personnalité " et vous devez vous adapter à leurs différentes façons de faire les choses.

10. Using WMI-Windows Management Instrumentation


11. En utilisant un outil tiers tel que ccleaner ou similaire

  • plusieurs Les 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 recommandations commerciales), 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 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 sites de téléchargement (attaque FTP).
    • I use virustotal.com pour vérifier mes téléchargements, et aussi Sysinternals Process Explorer pour vérifier les processus d'exécution après l'installation - avec le logiciel de sécurité régulier (selon ce qui est disponible).
    • A une quantité surprenante de logiciels de" zone grise " est généralement trouvée avec cette approche (barres d'outils, smileys, adware, etc...), ainsi que plusieurs faux positifs (ils peuvent aussi causer des problèmes car les logiciels de sécurité bloquent leur accès ou les mettent en quarantaine en faisant beaucoup de bruit). Et certainement vrai malware ainsi.
    • quelques conseils d'utilisation de Process Explorer peuvent être trouvés ici - une série de tweets - cet outil de Process Explorer hooks up to VirusTotal.com pour vérifier tous les processus en cours d'exécution de façon interactive - il suffit de quelques étapes de configuration.
    • je dois noter que L'Explorateur de processus fournit une vérification de signature de dossier, mais aucune heuristique - autant que je comprends (pas de vérification pour les opérations suspectes, juste une vérification avec 60+ suites de sécurité pour les dossiers marqués). Vous avez besoin d'un outil de sécurité régulier pour la protection heuristique interactive en ligne.
    • Pour ce qu'il vaut, je pense que certains le logiciel de sécurité limite sur causer des problèmes plus faux-positifs que les dommages de malware. Les derniers mots de l'ère des objets de rançon...
    • C'est une assez grande digression - Je ne veux juste pas voir les gens télécharger des logiciels malveillants. Faites votre virustotal.com vérifiez au moins.
  • désinstaller comme ceci devrait marcher OK. Je pense que ces outils gâchent trop de choses quand vous essayez leur "nettoyage" les fonctionnalités". À utiliser avec prudence. Si vous utilisez seulement la fonctionnalité de désinstallation, vous devriez être OK.

12. En utilisant un outil de nettoyage tel que msizap ou similaire

  • l'exhaustivité msizap.exe doit être mentionné bien qu'il soit déprécié , non supporté et périmé . Il ne doit pas être utilisé sur les nouvelles versions de Windows
  • cet outil en ligne de commande ( msizap.exe ) avait également une interface graphique disponible ( MSICUU2.exe ). Les deux outils sont deprectated.
  • l'utilisation prévue de ces outils était de nettoyer à défaut de désinstallation :
    • généralement pour le cas rare lorsque le MSI avec le nom aléatoire est erronément manquant et désinstaller échoue pour cette raison tout en demandant l'original MSI
      • C'est un problème rare, mais je l'ai vu moi-même. Quelques causes potentielles:
        • interférence avec restauration du système ? La restauration d'une image système précédente supprime accidentellement un fichier MSI caché?
        • applications de nettoyage mal conçues supprimer ce qu'ils ne devriez pas?
        • MSI problèmes de conception ou d'un accident dans msiexec.exe vers la fin de l'installation lors de l'enregistrement du produit final? Je trouve cela peu probable puisque la mise en cache est faite avant le démarrage de l'installation, mais j'ai vu des problèmes comme celui-ci lors du développement des fichiers MSI.
        • A panne de courant soudaine ? Aussi peu probable en raison de la protection intégrée dans Windows Installer, mais une perte de puissance soudaine peut toujours causer inattendu résultat.
        • Anti-virus ou autre logiciel de sécurité supprimant ou bloquant l'accès au fichier MSI caché?
        • si vous développez un MSI et maintenez un test de réinstallation, vous pouvez déclencher ce problème en réutilisant le même code de paquet entre les compilations (MSI traite différents fichiers MSI comme le même fichier par définition si le code de paquet est le même - tous les types de problèmes étranges résultent). Il s'agit d'un cas très particulier en général seulement vu sur les ordinateurs utilisés pour le développement ou L'assurance de la qualité.
        • l'utilisateur ou l'administrateur supprime manuellement fichiers MSI à partir du dossier cache pour enregistrer ou créer disponible espace disque ou tout simplement pour bricoler avec les paramètres de Windows. Le dossier est "super caché" et difficile d'accès, mais il est encore possible de le trouver et de supprimer les fichiers.
        • Il y a certainement d'autres causes possibles, mais la liste a devenu trop long et volumineux déjà.
    • également pour d'autres types de défaut de désinstallation
    • il pourrait également être utilisé pour zapper toute installation MSI, bien que ce ne soit évidemment pas conseillé.
    • plus d'informations: pourquoi MSI nécessite l'original .le fichier msi de procéder à une désinstallation?
  • cet outil de soutien plus récent (cet outil est maintenant également obsolète) peut être essayé sur les versions récentes de Windows si vous avez des paquets MSI obsolètes à désinstaller.
  • certains ont suggéré d'utiliser l'outil lié ici par saschabeaumont: désinstaller sans fichier MSI . Si vous l'essayer et ça marche, assurez-vous de nous le faire savoir.
  • Si vous avez accès au MSI original qui a été réellement utilisé pour installer le produit, vous pouvez l'utiliser pour exécuter la désinstallation. Ce doit être le MSI exact qui a été utilisé, et pas seulement un similaire.

13. En utilisant restauration du système ("installation undo" - dernier recours IMHO)

  • ce n'est pas à proprement parler une façon de " désinstaller "mais" annuler " la dernière installation, ou plusieurs s'installe pour cette question.
  • restaurer par un point de restauration ramène le système à un état d'installation précédente (vous pouvez trouver des démos vidéo de ce sur YouTube ou un site similaire).
  • notez que la fonctionnalité peut être désactivée entièrement ou partiellement - il est possible de désactiver définitivement pour l'ensemble de 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, ne pas utiliser la fonctionnalité pour le plaisir. Il s'agit d'un dernier recours et est le mieux utilisé pour roll back de nouveaux pilotes ou les configurations qui viennent d'être installés et se trouvent à causer des problèmes immédiats ( bluescreen , redémarrages, instabilité, etc...).
  • le plus long vous revenir le plus retravailler, vous allez créer pour vous-même, et plus le risque sera. La plupart des systèmes ne disposent que de quelques points de restauration, et la plupart d'entre eux s'étirent en arrière juste un mois ou deux je crois.
  • soyez conscient que la restauration du système pourrait affecter Windows Updates qui doit ensuite être appliqué de nouveau-ainsi que de nombreux autres paramètres du système. Au-delà des nuisances pures, cela peut aussi provoquer des problèmes de sécurité à refaire surface et vous pourriez vouloir exécuter un contrôle de sécurité sur la ou les cases cibles en utilisant Microsoft Baseline Security Analyzer ou des outils similaires.
  • puisque j'ai mentionné la restauration du système, je suppose que je devrais mentionner la dernière caractéristique de bonne Configuration connue . Cette fonctionnalité n'a rien à voir avec la désinstallation ou la restauration du système, mais c'est la dernière configuration de démarrage qui a fonctionné ou qui a abouti à un système en cours d'exécution. Il peut être utilisé pour faire fonctionner votre système à nouveau s'il bluescreen ou s'arrête pendant le démarrage. Cela arrive souvent après l'installation du pilote.

14. Des Fonctions De Windows Installer (C++)

par souci d'exhaustivité, je suppose que nous devrions mentionner le cœur de tout cela - la manière jusqu'au métal: les Win32 Windows Installer les fonctions API . Ce sont probablement les fonctions utilisées par la plupart, si pas tous les d'autres approches présentées ci-dessus "sous le capot". Ils sont principalement utilisés par des applications ou des solutions traitant directement avec MSI en tant que technologie.

il y a une réponse sur serverfault.com ce qui peut être intéressant comme un résumé des différentes approches programmatiques pour désinstaller (com Automation, .NET, Win32 installer des fonctions).

ci-dessous, vous trouverez un extrait de C++ montrant comment désinstaller Orca, 10.1.17134.12 par Code produit utilisant un appel à la fonction MsiConfigureProductEx . Pour désinstaller un autre produit, remplacez le GUID spécifié pour prodcode par celui de votre produit. Pour trouver le code du produit voir cette réponse: Comment puis-je trouver le code produit D'une configuration MSI installée?

la désinstallation se fera en mode GUI complet. Pour exécuter en mode silencieux ou un autre mode GUI (réduit, basique, etc...), reportez-vous à la: MsiSetInternalUI function .

#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:

  1. créer une nouvelle" application Windows Console " à partir de Visual C++ => Windows Desktop.
  2. copiez et collez le code ci-dessus dans votre fichier CPP principal (en remplaçant tout ce qui s'y trouve).
  3. ça devrait être ça pour pouvoir exécuter le code. Peut-être fixer un point de rupture, construire et courir.

127
répondu Stein Åsmul 2018-09-13 21:35:40

rappelez-vous également qu'une désinstallation peut être initialisée en utilisant la commande WMIC:

wmic product get name -- > cela affichera les noms de toutes les applications installées

wmic product where name='myappsname' call uninstall -- > ceci va désinstaller l'application.

30
répondu themrnutz 2013-08-01 18:03:28

l'extension du fichier msi est mappée à msiexec (de la même façon que pour msiexec).nom de fichier txt sur une invite de commande lance le bloc-notes/par défaut .txt gestionnaire de fichier pour afficher le fichier).

tapant ainsi un nom de fichier avec un .MSI extension exécute vraiment msiexec avec le fichier MSI comme argument et prend l'action par défaut, installer. Pour cette raison, désinstaller nécessite que vous invoquiez msiexec avec le commutateur de désinstallation pour le décompiler.

3
répondu Tuminoid 2015-09-06 16:59:33
wmic product get name

bloque le cmd... encore clignotant _ après quelques minutes

dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall , si vous pouvez trouver le dossier avec le nom du logiciel que vous essayez d'installer (pas celui nommé avec le code produit), la chaîne de désinstallation pointe vers le propre désinstalleur de l'application C:\Program Files\Zune\ZuneSetup.exe /x

2
répondu sdaffa23fdsf 2011-11-10 06:57:25

je voudrais essayer la syntaxe suivante - cela fonctionne pour moi.

msiexec /x filename.msi /q 
1
répondu Peter Mortensen 2013-06-17 18:49:30

je suppose que quand vous tapez un fichier int.MSI dans la ligne de commande, Windows appelle automatiquement le fichier msiexec.msi pour vous. Je suppose que c'est parce que quand tu tapes une photo.png il affiche le visualiseur d'image par défaut.

-1
répondu smack0007 2009-01-16 10:46:01