Comment faire pour désinstaller avec msiexec à l'aide de l'id de produit guid sans .msi fichier présent
Je suis en train d'automatiser la désinstallation de paquets créés à l'aide de WiX pour les fins de la modification du logiciel installé pile & configuration sans la remise en service d'un ensemble de l'OS. Finalement je vais utiliser de scripts powershell pour ce faire, mais pour le moment je n'arrive pas à obtenir mon paquet de test pour désinstaller de manière interactive avec cmd.
Si je lance:
msiexec /x '{A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8}'
msiexec /x A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8
J'obtiens:
"Le package d'installation n'a pas pu être ouvert. Vérifiez que le package
existe et que vous pouvez accéder, ou contactez le fournisseur de l'application
pour vérifier que c'est un Package Windows Installer valide."
Si je lance:
msiexec /x {A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8}
J'obtiens:
"Cette action est uniquement valable pour les produits qui sont actuellement installés"
J'ai regardé le programme d'installation de windows guide, le WiX documentation, msiexec documentation et utilisé orca pour aller sur la .msi moi, mais je n'ai pas vraiment trouvé quelque chose qui donne une image claire de la façon dont une désinstallation est traitée. Est le .msi fichier requis et si non, alors pourquoi ne programme d'installation de windows semblent penser que c'est lors d'une GUID?
Le WiX code pour le .programme d'installation msi est:
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='htp://schemas.microsoft.com/wix/2006/wi' >
<!--DO NOT COPY /PASTE THE PRODUCT ID GUID BELOW TO YOUR OWN WIX SOURCE -->
<Product Id='A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8' Language='2057'
Manufacturer='COMPANYNAME IT-Operations'
Name='COMPANYNAMEServerListener' Version='1.0.0'
UpgradeCode='PUT-GUID-HERE'>
<Package Id='*' Manufacturer='COMPANYNAME IT-Operations' Compressed='yes' />
<Media Id='1' Cabinet='COMPANYNAMEServerListener.cab' EmbedCab='yes' />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='COMPANYNAME' Name='COMPANYNAME'>
<Directory Id='INSTALLDIR' Name='COMPANYNAMEServerListener'>
<Component Id='MainExecutable' Guid='*' >
<File Id='COMPANYNAMEServerListener.exe'
Source='COMPANYNAMEServerListener.exe' Vital='yes'
KeyPath='yes' />
<ServiceInstall
Id='COMPANYNAMEServerListenerInstall'
DisplayName='COMPANYNAMEServerListener'
Description='Accepts and discards TCP connections on port 28028 to indicate that this server is alive and ready to be controlled'
Name='COMPANYNAMEServerListener'
Account='NT AUTHORITY\LocalService'
ErrorControl='normal'
Start='auto'
Type='ownProcess'
Vital='yes'
>
<ServiceDependency Id='tcpip'/>
</ServiceInstall>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="COMPANYNAMEServerListener" Wait="yes" />
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
<Feature Id='Complete' Level='1' >
<ComponentRef Id='MainExecutable' />
</Feature>
<CustomTable Id ="COMPANYNAMEMetadata">
<Column Id="Property" Type="string" Category="Identifier" PrimaryKey="yes"/>
<Column Id="Value" Type="string"/>
<Row>
<Data Column="Property">InstallString</Data>
<Data Column="Value">/qn</Data>
</Row>
</CustomTable>
</Product>
</Wix>
- Vous êtes à 100% de réponses correctes que vous avez à utiliser des accolades lors de la référence à l'Id. Je n'ai pas énormément d'expérience avec WiX, mais j'étais sous l'impression que ce que vous faites est correct. Qu'advient-il si vous ouvrez une invite de commande et tapez rundll32 dfshim CleanOnlineAppCache et essayer de nouveau?
- Pour une longue liste de façons différentes de faire cette case Désinstaller un fichier MSI à partir de la ligne de commande sans l'aide de msiexec
Vous devez vous connecter pour publier un commentaire.
La commande que vous spécifiez est correct: msiexec /x {A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8}
Si vous obtenez "Cette action est uniquement valable pour les produits qui sont actuellement installés" vous avez utilisé une inconnue du produit ou de l'emballage code, et vous devez trouver la bonne. Souvent, cela peut être causé par l'utilisation d'une fausse code du package au lieu d'un code de produit pour désinstaller un paquet de code change à chaque reconstruction d'un fichier MSI, et est le seul guid que vous voyez lorsque vous affichez un fichier msi de la page des propriétés. Il doit travailler pour désinstaller, à condition que vous utilisez la bonne. Pas de place pour l'erreur. Si vous souhaitez trouver le code du produit au lieu de cela, vous devez ouvrir le fichier MSI. Le code produit est trouvé dans la table de la Propriété.
Mise à JOUR, Janvier 2018:
Avec tout le registre des redirections en cours, je ne suis pas sûr que le dessous de la base de registres approche est une option plus viable. Je n'ai pas vérifié correctement, car j'ai désormais s'appuyer sur l'approche suivante à l'aide de PowerShell: Comment puis-je trouver le produit GUID d'un MSI installé le programme d'installation?
Également vérifier cette référence de style de réponse décrivant les différentes façons de désinstaller un package MSI et les moyens de déterminer quelle version du produit que vous avez installé:
La désinstallation d'un fichier MSI à partir de la ligne de commande sans l'aide de msiexec
Héritage, registre option:
Vous pouvez également trouver le code produit en parcourant le registre à partir de cette clé de base:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall . Appuyez sur la touche F3 et recherchez le nom de votre produit. (Si c'est un 32 bits installer sur une machine 64 bits, il peut être sous HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall au lieu de cela).
Héritage, PowerShell option: (en grande partie similaire à la nouvelle, liée réponse ci-dessus)
Enfin, vous pouvez trouver le code produit par l'utilisation de PowerShell:
Poste similaire: WiX - Faire une mise à jour majeure sur un multi instance installer (capture d'écran de la façon de trouver le code produit de la MSI).
msiexec.exe /x "{588A9A11-1E20-4B91-8817-2D36ACBBBF9F}" /q
La bonne chose est, il est vraiment facilement et de façon déterministe à analyser:
Soit, la msi est vraiment pas installé sur le système ou que vous êtes en train de faire quelque chose de mal.
Bien sûr, l'appel correct est:
(Droits d'administrateur fallait, bien sûr - Avec des accolades sans les guillemets ici - citations ne sont nécessaires que, si les chemins d'accès ou de valeurs vides sont spécifiés dans la ligne de commande.)
Si le message est: "Cette action est uniquement valable pour les produits qui sont actuellement installés", puis, c'est vrai. Soit le paquet avec cette ProductCode n'est pas installé ou il y a une faute de frappe.
Pour vérifier où la faute est:
D'abord essayer de faire un clic droit sur la (probablement) installé .msi fichier lui-même. Vous pouvez voir (en plus de "Installer" et de "Réparation") Désinstallation d'entrée. Cliquez sur ce.
a) Si la désinstallation fonctionne, votre msi a une autre valeur ProductCode que vous vous attendez peut-être que vous avez tort WiX source ou de votre build a dynamique de journalisation où la valeur ProductCode changements).
b) Si la désinstallation donne le même "...uniquement valable pour les produits déjà installés" le paquet n'est pas installé (ce qui est évidemment une condition préalable pour être en mesure de le désinstaller).
Si 1.a) était le cas, vous pouvez regarder pour le bon code produit de votre colis, si vous ouvrez votre fichier msi avec Orca, Insted ou un autre éditeur ou de l'outil. Juste google pour eux. Regardez-là dans la table avec le nom de "Propriété" et recherchez la chaîne "valeur ProductCode" dans la première colonne. Dans la deuxième colonne, il est la valeur correcte.
Il n'y a pas d'autres possibilités.
Juste une suggestion pour l'utilisé en ligne de commande: je voudrais ajouter, au moins, le "/qb" pour une simple barre de progression ou "/qn" paramètre (le dernier pour terminer la désinstallation en mode silencieux, mais ne fait que de sens que si vous êtes sûr qu'il fonctionne).
Il n'y a aucune raison pour que le {} commande de ne pas travailler. Le semi-questions évidentes sont:
Vous êtes sûr que le produit est réellement installé! Il y a quelque chose dans ARP/Programmes&Caractéristiques.
L'installation d'origine est en effet visible dans le contexte actuel. Il semble que si il peut avoir été un utilisateur d'installer, et si vous êtes connecté en tant que quelqu'un d'autre maintenant, alors il ne sait pas à ce sujet - vous avez besoin de vous connecter sous le même compte que l'installation d'origine.
Si l' \windows\installer répertoire a été endommagé le fichier mis en cache serait absente, et qui est utilisé pour faire la désinstallation.
Merci à tous pour l'aide - s'avère qu'il était un WiX question.
Lorsque l'ID de Produit GUID a été laissé explicite & codé en dur, comme dans la question, le résultant .msi avait pas de propriété ProductCode mais l'ID d'un Produit de la propriété au lieu de cela lors de l'inspection avec orca.
Une fois que j'ai changé le GUID '*' pour générer automatiquement, la valeur ProductCode a montré en place et tout fonctionne très bien avec la syntaxe confirmé par les autres réponses.
vous avez besoin /q à la fin
Essayer cette commande
msiexec /x {product-id} /qr