Désinstallation d'un fichier MSI à partir de la ligne de commande sans utiliser msiexec
-
19-08-2019 - |
Question
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 deviez appeler le programme /x
et lui attribuer un /uninstall
ou <=>.
Comment désinstaller un MSI à partir de la ligne de commande sans utiliser la <=> routine?
La solution
Réponse courte: vous ne pouvez pas. Utilisez MSIEXEC / x
Réponse longue: lorsque vous exécutez le fichier MSI directement sur la ligne de commande, il ne fait que lancer MSIEXEC à votre place. Cette association est stockée dans le registre. Vous pouvez voir une liste d’associations en (dans l’Explorateur Windows) dans Outils / Options des dossiers / Types de fichiers.
Par exemple, vous pouvez exécuter un fichier .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 que les fichiers .MSI sont associés au ProgID & "Msi.Package &". Si vous regardez dans HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command
, vous verrez la ligne de commande que Windows utilise réellement lorsque vous & "Exécutez &"; un fichier .MSI.
Autres conseils
Il existe de nombreuses façons de désinstaller un package MSI. Ceci est conçu comme une & "Référence &";.
En résumé , vous pouvez désinstaller à l'aide de: msiexec.exe , ARP , WMI , PowerShell. , systèmes de déploiement tels que SCCM , VBScript / COM Automation, DTF ou via un dossier de cache Windows masqué et quelques autres options présentées ci-dessous.
Les premiers paragraphes contiennent des informations importantes sur les MSI, puis 14 sections contenant différentes manières de désinstaller un fichier MSI. Puh.
& "Babble, Babble - Over &";: Sections 1 , 2 et 3 sont les méthodes de désinstallation normales (et donc recommandées).
Personally I use option 3 or 5 from section 3
(les deux options avec la consignation, mais l'option 5 s'exécute en mode silencieux ainsi que). Si vous êtes très occupé , ignorez tout le babillage et optez pour un de ceux-ci - il fera le travail.
Si vous rencontrez des problèmes de désinstallation et recherchez une alternative à MsiZap.exe et à l'utilitaire désapprouvé et / ou à l'utilitaire Windows Installer CleanUp ( MSICUU2.exe ), vous pouvez essayer le nouveau outil FixIt de Microsoft ( ou la page internationale ). Peut apparemment fonctionner pour d’autres problèmes d’installation.
Si vous pensez que MSI et Windows Installer sont une source de problèmes, nous vous invitons à consulter la section les avantages pour l'entreprise de l'utilisation de fichiers MSI .
MSI d’Installcript sont généralement intégrées à un fichier setup.exe . Pour en savoir plus sur les paramètres à utiliser pour désinstaller de telles configurations, veuillez consulter les liens suivants: . Fichier de référence au format pdf , Configuration. Paramètres de ligne de commande exe et Update.exe .
Certains fichiers MSI sont installés dans le cadre de bundles via un mécanisme tel que Graver (WiX Toolkit) ou InstallShield Suite . 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 .
Notez que l'exécution de la désinstallation en mode silencieux ou en mode interactif peut entraîner des résultats différents (!) . Pour une description assez détaillée de la raison pour laquelle c'est le cas, veuillez lire le message suivant: La désinstallation à partir du Panneau de configuration est différente de la suppression de .msi
Si, inopinément, vous êtes invité à spécifier le support d'installation d'origine lors de la désinstallation, lisez la réponse suivante: Pourquoi MSI exige-t-il que le fichier .msi d'origine procède à une désinstallation? et peut-être aussi section 12 ci-dessous pour quelques détails techniques importants.
Si vous avez installé CCleaner ou des outils de nettoyage similaires, passez directement à la section . 11 .
Si la désinstallation échoue complètement (exécution impossible), voir les sections 12 & amp; 13 ci-dessous pour un moyen potentiel de & Quot; annuler & "; l'installation à l'aide des restauration du système et / ou des outils de nettoyage.
1. Using the original MSI
- Si vous avez accès au fichier MSI d'origine utilisé pour l'installation, vous pouvez simplement cliquer avec le bouton droit de la souris dans l'Explorateur Windows et sélectionner Désinstaller .
- Vous pouvez également désinstaller via la ligne de commande, comme expliqué à la section 3.
2. Using the old ARP Applet OR new Windows 8/10 Settings Interface
-
Je dois juste mentionner la (les) approche (s) normale (s) bien que ce soit évident
-
ARP
=Add / Remove Programs Applet
(appwiz.cpl
) -
Windows 10 Settings Interface
= > Nouveau shell pour la même opération
-
-
ARP :
- Partir démarrer & # 8594; exécuter & # 8594; Appwiz .cpl & # 8594; ENTER pour ouvrir l'applet Ajout / Suppression de programmes (ou cliquez sur Ajouter / Supprimer des programmes dans le panneau de configuration)
- Cliquez sur " Supprimer " pour le produit que vous souhaitez désinstaller
-
Interface de paramètres (Windows 8/10):
- Utiliser la nouvelle interface graphique de configuration dans Windows 8/10
- Clé Windows + Tap I = >
Apps & Features
. Sélectionnez l'entrée et désinstallez. - Certains rapports d'erreurs lors de l'invocation de la désinstallation de cette manière. S'il vous plaît ajouter des commentaires ci-dessous si vu.
- Essayez également cette réponse
- Conseil général : essayez de désactiver l'anti-virus, puis réessayez.
3. Using msiexec.exe command line (directly or via a batch file)
- Vous pouvez désinstaller via une invite de commande ( cmd.exe ), fichier de traitement par lots ou même à partir d'un fichier exécutable sous la forme opération du shell .
- Pour ce faire, transmettez le GUID du produit (consultez la section ci-dessous pour savoir comment trouver ce GUID ) ou chemin d'accès au fichier MSI d'origine, si disponible, vers msiexec.exe .
-
Pour toutes les lignes de commande ci-dessous, vous pouvez ajouter
/qn
à effectuer la désinstallation en mode silencieux . Voici comment une désinstallation s’exécute lorsqu’elle est déclenchée à partir de l’applet Ajout / Suppression.-
Option 1: désinstallation interactive de base (accès au fichier MSI d'origine):
msiexec.exe /x "c:\filename.msi"
-
Option 2: désinstallation interactive de base via le GUID du produit (aucun accès au fichier MSI d'origine - voici comment trouver le GUID du produit - même lien que ci-dessous):
msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
-
Option 3: désinstallation interactive avec fichier journal détaillé :
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 fichier journal détaillé et détaillé ( prolixe, option de vidage du journal - écrit le journal de manière continue, 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"
-
Le flush à consignerCette option ralentit la désinstallation car le fichier journal est écrit en continu et non par lots. Cela garantit qu'aucune mémoire tampon de journal n'est perdue en cas de blocage de l'installation.
-
En d'autres termes, activez cette option si votre configuration plante et que votre fichier journal détaillé ne contient aucune information utile . Supprimez le point d'exclamation pour désactiver l'option vider dans le journal et la désinstallation sera beaucoup plus rapide. Vous obtenez toujours une journalisation détaillée, mais comme indiqué, certains tampons de journal pourraient être perdus.
-
-
Option 5 (recommandée): désinstallation en mode silencieux avec un fichier journal détaillé - suppression des redémarrages (pas de vidage dans le journal - voir l'option précédente pour connaître la signification de cela):
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 du paramètre (depuis que 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 de produit: Comment puis-je trouver le produit GUID d'une configuration MSI installée? (à désinstaller si vous n'avez pas le MSI d'origine à spécifier dans la commande de désinstallation).
-
-
Conseil supérieur : si vous créez un fichier journal pour votre désinstallation, vous pouvez localiser les problèmes dans le journal en recherche de la & Valeur 3 &"; . Ceci est particulièrement utile pour les fichiers commentés, car ils le sont: -).
-
Comment trouver le GUID du produit pour un MSI installé ?
- Powershell est recommandé de plusieurs manières: Comment puis-je trouver le GUID du produit d'une configuration MSI installée?
- Plusieurs autres moyens décrits ici (registre, dossier de cache local, etc.): Rechercher le GUID dans un fichier MSI
-
Plus d'informations sur la journalisation à partir de installsite.org : Comment créer un fichier journal de mon installation ? - Un excellent aperçu des différentes options et des spécificités de la journalisation InstallShield.
- Msiexec (options de ligne de commande) : présentation de la ligne de commande de msiexec.exe à partir de MSDN . Voici la version de Technet . / li>
4. Using the cached MSI database in the super hidden cache folder
- MSI supprime toutes les cabines (anciennes versions de Windows) et met en cache chaque MSI installé dans un dossier système super caché sous % SystemRoot% \ Installer (vous devez afficher les fichiers cachés pour le voir).
- NB : ce dossier caché par le souper est désormais traité différemment dans Windows & nbsp; 7 et versions ultérieures. Les fichiers MSI sont maintenant mis en cache dans leur taille maximale . Lisez le fil de discussion lié pour plus de détails. Il est recommandé de le lire à toute personne qui trouve cette réponse et manipule les paramètres Windows dangereux.
- Un nom aléatoire (format hexadécimal) est attribué à tous les fichiers MSI ici, mais vous pouvez obtenir des informations sur chaque fichier MSI en affichant la barre d'état de l'Explorateur Windows (Affichage - > Barre d'état), puis en sélectionnant un fichier MSI. . Le flux récapitulatif du fichier MSI sera visible au bas de la fenêtre de l’explorateur Windows. Ou, comme le souligne Christopher Galpin, activez la commande & "Commentaires &"; colonne dans l'Explorateur Windows et sélectionnez le fichier MSI ( voir cet article pour savoir comment faire ceci a>).
- Une fois que vous avez trouvé le bon MSI, cliquez dessus avec le bouton droit de la souris et choisissez Désinstaller.
- Vous pouvez également utiliser PowerShell pour afficher le chemin d'accès complet au package mis en cache localement ainsi que le nom du produit. C’est l’option la plus facile à mon avis.
- Pour lancer PowerShell : maintenez la touche Windows enfoncée, appuyez sur R, relâchez la touche Windows, tapez & "PowerShell &"; et appuyez sur OK . Ensuite, agrandissez la fenêtre PowerShell et exécutez la commande ci-dessous:
get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize
>
- Voir également cette réponse: Comment puis-je trouver le GUID du produit d’une configuration MSI installée?
5. Using
PowerShell
- Il existe un similaire, mais un script PowerShell plus complet disponible sur MSDN . Il permet d’exécuter la désinstallation sur plusieurs ordinateurs.
-
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 une vérification de la cohérence logicielle qui est très lente et, dans certaines circonstances, peut provoquer un MSI. auto-réparation à déclencher. Voir cet article: Script de désinstallation de Powershell - Ayez un script réel mal de tête
- Je n'ai pas testé cela moi-même, mais il semble que $ app.Uninstall () puisse exécuter le UninstallString enregistré dans les paramètres de registre de l'applet ARP. Cela signifie que, dans certains cas, il est possible d’exécuter modify au lieu de désinstaller.
- Consultez cette rubrique pour plus de détails et pour procéder à la désinstallation via Powershell: Comment désinstaller une application à l'aide de PowerShell?
6. Using the .NET DTF Class Library
(élément de la boîte à outils WiX )
- Cette option est incluse pour les développeurs qui se lancent dans le déploiement et le MSI - ce n'est pas vraiment pratique en tant que & "solution miracle &"; la boîte à outils WiX , qui est un framework gratuit pour la création de fichiers MSI compilés à partir de Fichier (s) source (s) XML.
- Aperçu rapide de WiX et de son " historique &: Windows Installer et la création de WiX . Et voici WiX en contraste avec d'autres déploiements outils (commerciaux) - (forces et faiblesses - aussi objectivement que possible).
- DTF (Deployment Tools Foundation) est distribué dans le cadre de WiX, comme expliqué ci-après: Le code source de Deployment Tools Foundation est-il disponible? .
- DTF est essentiellement un encapsuleur .NET pour l’API Windows Installer Windows . Il élimine tout besoin d’interopérabilité COM lorsque vous travaillez avec Windows Installer via l’automatisation et n’est rien de moins qu’un joyau .NET - peut-être la bibliothèque .NET la plus facile à utiliser que j'ai jamais vue. Fortement recommandé - excellent même pour former des étudiants en C # .
- La source suivante de l'expert MSI Christopher Painter utilisant C # et DTF. Microsoft.Deployment.WindowsInstaller est l'un des assemblys 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\"");
}
- Autre alternative de Tom Blodget: Vérification de la réussite de la désinstallation
- Plus d'informations sur msiexec.exe par rapport à automatisation sur: serverfault.com .
7. Using the
Windows Installer Automation API
- Voici une discussion de la communauté autour de cette option: API d'automatisation de l'installateur Windows. échantillon de communauté
- Vous pouvez accéder à l'API via l'automatisation de script et les appels d'API C ++ (mon message sur serverfault.com)
-
La source suivante est adaptée de l'expert MSI Christopher Painter en utilisant VBScript :
Set installer = CreateObject("WindowsInstaller.Installer") installer.InstallProduct "product.msi", "REMOVE=ALL REBOOT=ReallySuppress" Set installer = Nothing
-
Voici un autre VBScript à désinstaller par le GUID de Symantec: http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry
-
Désinstaller à l'aide du code de mise à niveau & amp; ConfigureProduct .
8. Using a
Windows Installer major upgrade
- Une mise à niveau majeure de Windows Installer peut avoir lieu lors de l'installation d'un autre fichier MSI.
- Une mise à niveau majeure est créée en identifiant les produits connexes dans les " Tableau de mise à niveau &" ;. Ces configurations associées sont ensuite traitées comme spécifié dans le tableau. Cela signifie généralement qu'elles sont désinstallées, mais la configuration principale peut également être abandonnée (généralement utilisée pour détecter les versions les plus récentes de votre propre application présente sur la boîte).
9. Using Deployment Systems / Remote Administration Systems
- SCCM , CA Unicenter , IBM Tivoli , Altiris , une suite client de gestion, ainsi que plusieurs autres
- Ces outils proposent 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, de WMI , etc. ... et même leur propre façon d'invoquer les installs et uninstalls.
- D'après mon expérience, ces outils utilisent beaucoup de & "; personnalité &"; et vous devez vous adapter à leurs différentes façons de faire les choses.
10. Using WMI - Windows Management Instrumentation
- Ajout juste pour être complet. Il est déconseillé d'utiliser cette approche car elle est très lente .
- Une vérification de cohérence logicielle est déclenchée chaque fois que Win32_Product est appelé pour chaque installation
- La vérification de la cohérence est incroyablement lente et peut également déclencher une réparation logicielle . Voir cet article: Script de désinstallation de Powershell - Ayez un script réel mal de tête
- Pire encore, certaines personnes signalent que leurs journaux d'événements se remplissent avec les entrées MsiInstaller EventID 1035 - apparemment provoquées par des requêtes WMI adressées à la classe Win32_Product (personnellement, je n'ai jamais vu cela).
- Le WMICodeCreator.exe L’outil de création de code peut être utilisé pour expérimenter
- L'installation peut être appelée via
Win32_Product.Install
- La désinstallation peut être appelée via
Win32_Product.Uninstall
- L'installation peut être appelée via
- Exemple MSDN: Méthode de désinstallation de Win32_Product classe
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 packages MSI, mais également les programmes d'installation hérités.
- Je ne souhaite pas faire ici de recommandations sur des outils spécifiques (en particulier commerciaux), mais sur le bien connu CCleaner. propose une interface de désinstallation (et une version gratuite). Je devrais également ajouter que cet outil a subi un attaque de logiciels malveillants récemment .
- Je suppose que nous devrions tous nous rappeler que même les logiciels inoffensifs peuvent recevoir des logiciels malveillants à leurs emplacements de téléchargement (attaque FTP).
- J'utilise virustotal.com pour consulter mes téléchargements et Explorateur de processus Sysinternals pour vérifier les processus en cours après l'installation, avec une sécurité régulière logiciel (selon ce qui est disponible).
- Une quantité surprenante de " zone grise " les logiciels sont généralement utilisés avec cette approche (barres d'outils, smileys, adwares, etc.), ainsi que plusieurs faux positifs (ils peuvent également causer des problèmes lorsque les logiciels de sécurité bloquent leur accès ou les mettent en quarantaine en faisant beaucoup de fuzz). Et certainement aussi de vrais logiciels malveillants.
- Vous trouverez des conseils d'utilisation pour Process Explorer ici - une série de tweets - ceci L'outil Process Explorer se connecte à VirusTotal.com pour vérifier tous les processus en cours de manière interactive: il vous suffit de quelques étapes de configuration. .
- Je dois noter que Process Explorer fournit une vérification de la signature du fichier, mais pas d'heuristique - pour autant que je sache (aucune vérification d'opérations suspectes, juste une vérification avec plus de 60 suites de sécurité pour les fichiers marqués). Vous avez besoin d'un outil de sécurité régulier pour la protection heuristique interactive en ligne.ection.
- Pour ce qui en vaut la peine, je pense que certains logiciels de sécurité peuvent causer plus de problèmes faux positifs que de logiciels malveillants. Derniers mots célèbres à l'ère de la rançon ...
- C’est une digression suffisante. Je ne veux tout simplement pas voir les gens télécharger des logiciels malveillants. Effectuez au moins votre vérification virustotal.com .
- La désinstallation de cette manière devrait fonctionner correctement. Je pense que ces outils gâchent trop de choses lorsque vous essayez leurs & "Fonctionnalités de nettoyage &"; bien que. Utiliser avec précaution. Si vous utilisez uniquement la fonctionnalité de désinstallation, vous devriez être OK.
12. Using a cleanup tool such as
msizap
system restore
msizap
- Pour être complet,
msizap.exedoit être mentionné bien qu'il soit obsolète , non pris en charge et obsolète . Il ne doit être utilisé sur aucune version Windows plus récente - Cet outil de ligne de commande (
msizap.exe) dispose également d'une interface utilisateur graphique (MSICUU2.exe). Les deux outils sont dépréciés. - Ces outils étaient destinés à nettoyer les désinstallations échouant :
- Généralement, dans les rares cas où le fichier MSI mis en cache avec le nom aléatoire est manquant par erreur et que la désinstallation échoue pour cette raison tout en demandant le fichier MSI d'origine. C'est un problème rare, mais je l'ai vu moi-même. Quelques causes possibles: déplacé vers cette réponse .
- Mots clés: interférence de restauration du système, applications de nettoyage défectueuses, crash de msiexec.exe, panne de courant, interférence des logiciels de sécurité, erreurs de débogage du développement MSI (codes de paquetages identiques, etc.), bricolage et piratage utilisateur (contenu ici). ? économiser de l'espace?), etc ...
- Il pourrait également être utilisé pour supprimer toute installation MSI, bien que cela ne soit évidemment pas conseillé.
- Plus d'informations: Pourquoi MSI a-t-il besoin du fichier .msi d'origine pour procéder à la désinstallation?
-
Cet outil de support plus récent(cet outil est maintenant également obsolète) peut être essayé sur les versions récentes de Windows si vous avez des packages MSI obsolètes nécessitant une désinstallation. - Certains ont suggéré d'utiliser l'outil lié à saschabeaumont: Désinstaller sans fichier MSI . Si vous l'essayez et que cela fonctionne, assurez-vous de nous le faire savoir.
- Si vous avez accès au fichier MSI d'origine 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. ("installation undo" - last resort IMHO)
Windows Installer Functions (C++)
Orca, 10.1.17134.12
- À proprement parler, cela ne constitue pas un moyen de " désinstaller " mais pour " annuler " la dernière installation, ou plusieurs installations d'ailleurs.
- La restauration via un point de restauration ramène le système à un état d'installation précédent (vous pouvez trouver des vidéos de démonstration sur YouTube ou sur un site similaire).
- Notez que cette fonctionnalité peut être désactivée entièrement ou partiellement. Il est possible de la désactiver de manière permanente pour l’ensemble de la machine ou de procéder au cas par cas.
- J'ai constaté de nouveaux problèmes d'installation insolubles résultant d'une restauration du système, mais cela fonctionne normalement . Évidemment, n'utilisez pas cette fonctionnalité pour le plaisir. En dernier recours, il vaut mieux utiliser l'annulation de nouveaux pilotes ou de configurations qui viennent d'être installées et qui posent des problèmes immédiats ( écran bleu , redémarrage, instabilité, etc.).
- Plus vous remonterez longtemps, plus vous ferez de nouvelles retouches et plus le risque sera grand. La plupart des systèmes ne disposent que de quelques points de restauration, et la plupart d’entre eux remontent à un mois ou deux, je crois.
- Sachez que la restauration du système peut affecter les mises à jour Windows qui doivent ensuite être réappliquées, ainsi que de nombreux autres paramètres système. Au-delà des simples inconvénients, cela peut également provoquer des problèmes de sécurité et faire en sorte que vous souhaitiez exécuter un contrôle de sécurité spécifique sur la ou les zones cibles à l'aide de Microsoft Baseline Security Analyzer ou des outils similaires.
- Depuis que j'ai mentionné la restauration du système, je suppose que je devrais mentionner la dernière fonctionnalité de bonne configuration connue . Cette fonctionnalité 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 abouti à un système en cours d'exécution. Il peut être utilisé pour remettre votre système en marche s'il bleuscreen ou s’arrête pendant le démarrage. Cela se produit souvent après l’installation du pilote.
14. prodcode
Pour être complet, je suppose que nous devrions mentionner le cœur de tout cela - la manière la plus simple: les fonctions de Win32 Windows Installer API . Ce sont probablement les fonctions utilisées par la plupart, sinon toutes les autres approches énumérées ci-dessus & "Sous le capot &"; Ils sont principalement utilisés par les applications ou les solutions traitant directement de MSI en tant que technologie.
Il existe une réponse sur serverfault.com qui pourrait être intéressante, sous la forme est un résumé des différentes méthodes de désinstallation par programme (fonctions d’installation COM Automation, .NET, Win32).
Vous trouverez ci-dessous un extrait de code C ++ indiquant comment désinstaller <=> par code de produit à l'aide d'un appel à Fonction MsiConfigureProductEx . Pour désinstaller un autre produit, remplacez le GUID spécifié pour <=> par celui de votre produit. Pour trouver le code produit, consultez la réponse suivante: Comment puis-je trouver le GUID du produit d'une configuration MSI installée?
La désinstallation aura lieu en mode graphique complet. Pour fonctionner en mode silencieux ou en un autre mode graphique (réduit, basique, etc.), veuillez consulter la: 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
}
L'extrait de code a été créé et testé avec la dernière version de Visual Studio 2017 de septembre 2018:
- Créer 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 tout ce qui se trouve là-bas).
-
Cela devrait être cela pour pouvoir exécuter le code. Peut-être définir un point d'arrêt, construire et exécuter.
-
Prenez garde aux modifications apportées aux modèles par défaut dans VS2017 et aux erreurs étranges pouvant en résulter: Il y a trop d'erreurs pour que le moteur IntelliSense fonctionne correctement . - UPDATE de septembre 2018 : les modèles ont à nouveau été modifiés. Je ne vois plus le problème ci-dessus.
- Le MSLe lien DN dans le code répertorie les messages d'erreur possibles renvoyés par msiexec.exe.
-
N'oubliez pas non plus qu'une désinstallation peut être lancée à l'aide de la commande WMIC:
wmic product get name
- > Ceci listera les noms de toutes les applications installées
wmic product where name='myappsname' call uninstall
- > cela désinstallera l'application.
L'extension de fichier msi
est mappée à msiexec (de la même manière, taper un nom de fichier .txt sur une invite de commande lance le gestionnaire de fichiers Notepad / default .txt
pour afficher le fichier).
Ainsi, la saisie d’un nom de fichier avec une extension .msi exécute réellement msiexec avec le fichier MSI en tant qu’argument et prend l’action par défaut, install. Pour cette raison, la désinstallation nécessite que vous appeliez msiexec avec le commutateur de désinstallation pour le désinstaller.
wmic product get name
Obtient simplement le cmd ... toujours clignotant _ après quelques minutes
dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
, si vous trouvez le dossier portant le nom du logiciel que vous essayez d'installer (et non celui nommé avec ProductCode), la chaîne UninstallString pointe sur le propre programme de désinstallation de l'application C:\Program Files\Zune\ZuneSetup.exe /x
Je voudrais essayer la syntaxe suivante - cela fonctionne pour moi.
msiexec /x filename.msi /q
Je suppose que lorsque vous tapez int file.msi dans la ligne de commande, Windows appelle automatiquement msiexec file.msi pour vous. Je suppose cela parce que lorsque vous tapez picture.png, la visionneuse d'images par défaut apparaît.