Action personnalisée avant de MSI désinstallation avec Wix
Je suis l'aide de Wix pour code mon propre programme d'installation MSI. J'ai besoin d'exécuter l'action personnalisée seulement avant la désinstallation du produit, mais avant toutes les valeurs de registre ou les fichiers sont supprimés. Je n'ai la suite (juste pour essayer):
<Property Id='CALC'>Calc.exe</Property>
<CustomAction Id='BeforeUninstall01' Property='CALC' ExeCommand='' Return='check' />
<InstallExecuteSequence>
<Custom Action='BeforeUninstall01' After='InstallInitialize'>Installed</Custom>
</InstallExecuteSequence>
Il fonctionne si je choisis de uninstall
à partir du Panneau de Contrôle, mais si je lance mon MSI à la place (alors qu'il est déjà installé) BeforeUninstall01
personnalisée d'action est déclenché toute façon, il ne devrait pas.
Aucune idée de comment changer cet état?
OriginalL'auteur ahmd0 | 2013-07-11
Vous devez vous connecter pour publier un commentaire.
Vous choisissez la condition "Installé".
Donné votre code de la condition à l'aide de la propriété intégrée "SUPPRIMER":
Cela permet également de vous (même si il n'est pas nécessaire) pour désinstaller un seul élément, mais pas le produit dans son ensemble sans que votre action personnalisée (ca) est déclenchée.
En d'autres termes, l'autorité de certification est déclenchée toujours et seulement, si
Vôtre condition commence le ca toujours, mais pas pour la première installation (incl. de réparation, de mise à jour, désinstaller, modifier, corriger, etc. Ce n'est pas, ce dont vous avez besoin, en effet.
La condition de Reubz est légèrement différent, ce serait toujours mais pas pour la première installation et non pas lors d'une Mise à jour Majeure, qui n'est pas une réelle amélioration ici.
Concernant le séquençage:
Si votre ca a vraiment besoin de droits élevés, alors vous devez exécuter l'action personnalisée "différé", avec système de droits et de changer votre ca définition (sinon, laissez-le):
(Je ne suis pas un WiX assistant, que je ne connais MSI très bien, donc je n'ai pas vérifié une partie de votre WiX code, seules les questions.)
MsiGetProperty
n'est pas en mesure de récupérer toutes les propriétés à partir d'un code C++. Ou alors, ils sont plutôt des chaînes vides. Cela cesse d'être un problème si je supprimeExecute="deferred"
mais alors, il n'est pas élevée. Vous voyez où je vais avec elle -- sonne comme un catch-22...Oui, c'est vraiment ennuyeux. Dans chaque projet advance quelqu'un de pièges dans cette. C'est expliqué un peu dans le lien suivant. Soit vous stockez les propriétés dans un registre ou le fichier de paramètres avant de InstallInitialize et d'analyse dans votre différés action personnalisée indépendamment de msi. Ou vous devez suivre la méthode documentée et stocker le tout dans une propriété nommée "CustomActionData". Je n'ai pas utilisé dans WiX mais je suis sûr qu'il y est quelque chose qui n'est pas trop compliqué, une fois que vous avez obtenu le point.
Jetez un oeil ici ou google, vous trouverez la même réponse peut-être quelque part mieux expliqué: msdn.microsoft.com/en-us/library/windows/desktop/...
Merci pour votre aide. Oui, j'ai fini par utiliser
CustomActionData
approche, mais il est très lourd pour le pack de tous les paramètres. La raison que j'avais à faire c'était de passer à l'installation du contexte dans l'action personnalisée, c'est à dire nettoyer l'installation, la réinstallation ou réparation, la modification ou la désinstallation, ce qui en soi une "poignée" pour gérer.En Plus, dans certains cas, de mon action personnalisée a été appelé élevée, même sans montrer un utilisateur invite UAC. Je ne suis pas sûr si c'est un bug dans Windows, ou quoi. I pour vous être conscient de ces packages MSI pour mon propre usage...
OriginalL'auteur Philm
essayer une condition supplémentaire pour vérifier que le produit n'est pas mis à niveau
Calc.exe
mais il le fait avant même que le contrôle de compte d'utilisateur de l'invite d'élévation. Je devrais peut-être appeler cela quelque temps plus tardInstallInitialize
?OriginalL'auteur Riv