2010-08-23 15 views
0

J'ai une action personnalisée qui supprime divers répertoires dans le cadre du processus de désinstallation. Je veux appeler cette action à différents points dans la séquence d'installation en fonction de ce qui se fait:WIX Action personnalisée - Exécuter à différents moments pour l'installation, la mise à niveau et la désinstallation

  • Lors d'une installation, ne pas exécuter l'action personnalisée
  • Lors d'une mise à niveau, exécutez l'action personnalisée après RemoveExistingProducts
  • Lors d'une désinstallation, exécutez l'action personnalisée après RemoveFolders

Je peux probablement obtenir chacun d'entre eux de travailler individuellement, mais comment puis-je les faire travailler ensemble la façon dont je veux. J'ai essayé quelque chose comme ça (un code de prendre here):

<InstallExecuteSequence> 

    <Custom Action="PreventDowngrading" After="FindRelatedProducts"> 
    NEWERPRODUCTFOUND AND NOT Installed 
    </Custom> 

    <LaunchConditions After="AppSearch" /> 
    <RemoveExistingProducts Before="InstallInitialize" /> 

    <!-- NEW _> Clean old files AFTER uninstall during an upgrade --> 
    <Custom Action="CleanUp" After="RemoveExistingProducts" > 
    UPGRADINGPRODUCTCODE 
    </Custom> 

    <!-- NEW _> Clean old files LAST during an uninstall --> 
    <Custom Action="CleanUp" After="RemoveFolders" > 
    (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") 
    </Custom> 

</InstallExecuteSequence> 

Mais obtenir une erreur de symbole en double quand je fais construire. Toute aide est la bienvenue!

Répondre

0

Une action personnalisée peut être dans une séquence une seule fois. J'ai cependant de plus grandes préoccupations: quel type de mise à niveau faites-vous? Une mise à niveau majeure entraîne une désinstallation du produit précédent afin que votre autorité de certification puisse s'exécuter deux fois comme vous le décrivez.

Je voudrais marcher vraiment à la légère ici. Pouvez-vous éventuellement utiliser l'élément WiX RemoveFolder (table MSI RemoveFile). Ce sera beaucoup plus facile et fiable à mettre en œuvre. Si vous devez utiliser une action personnalisée, j'utiliserais des états d'action de composant pour déterminer quand il devrait fonctionner plutôt que des propriétés plus génériques comme montré ci-dessus.

+0

C'est une mise à niveau majeure que je fais, mais la désinstallation ne supprime pas les fichiers ajoutés au dossier, donc il reste souvent des choses qui traînent après la désinstallation. Quels avantages utiliserait les états d'action des composants sur les propriétés que j'ai utilisées? À la vôtre, Matt. – mattyB

+0

Regardez l'élément . Vous pouvez spécifier un ID de répertoire et FileSpec et cela va apprendre à MSI à faire le nettoyage supplémentaire pour vous. Alors vous n'avez pas à jouer avec toutes ces actions personnalisées risquées. –

+0

Est-ce que ne fonctionnera pas si le dossier est vide? À la fin, j'ai utilisé une action personnalisée, mais je préférerais le faire entièrement dans l'installateur la prochaine fois. – mattyB

1

Vous pouvez également utiliser RemoveFiles pour se débarrasser des fichiers superflus dans un répertoire.