2017-09-27 11 views
0

J'ai une action personnalisée qui lors de la mise à niveau, supprime certains fichiers avant installFiles qui remet les nouveaux fichiers. Ce que je remarque est l'action est appelée 2 fois. 1.Obtient et supprime le fichier. 2. InstallFiles copie les nouveaux fichiers. 3. De nouveau est appelé et supprime le fichier. (Cela ne devrait pas arriver).Action personnalisée Wix exécutée deux fois pendant la mise à niveau?

Mon action personnalisée ressemble -

<InstallExecuteSequence> 
      <RemoveExistingProducts After="InstallFinalize" /> 
      <Custom Action="NEWER_VERSION_PRESENT" After="FindRelatedProducts"> 
     NEWER_VERSIONS 
      </Custom> 
      <Custom Action="DeleteourFiles" Before="InstallFiles"></Custom> 
</InstallExecuteSequence> 

je l'ai lu quelque part que pour le scénario de mise à niveau de cette action personnalisée est appelée twice.I veux savoir comment empêcher de s'appeler pour la deuxième fois. Essentiellement, je veux que mon action personnalisée supprime certains fichiers de l'ancienne version avant de mettre les nouveaux fichiers. Quelle condition dois-je utiliser?

Répondre

1

Votre ancienne installation est supprimée et les fichiers sont supprimés.

<RemoveExistingProducts After="InstallFinalize" /> 

Planifie l'exécution de l'ancien programme d'installation pour le désinstaller après InstallFinalize qui exécute ensuite votre installation comme une désinstallation.

<Custom Action="DeleteourFiles" Before="InstallFiles"></Custom> 

A pas état là-dessus il sera toujours courir chaque fois que l'installation fonctionne si elle est installation ou la désinstallation ou la mise à niveau.

Si vous souhaitez l'exécuter lors de la mise à niveau l'installation et lorsque vous désinstallez explicitement vous devez ajouter

<Custom Action="DeleteourFiles" Before="InstallFiles">NOT UPGRADINGPRODUCTCODE</Custom> 

Au cours des mises à niveau l'installation que vous avez couru va exécuter le programme d'installation (ancienne version) déjà installée et définir UPGRADINGPRODUCTCODE comme son propre code de produit. Ainsi, si vous dites que vous exécutez cette action personnalisée lorsque le paramètre UPGRADINGPRODUCTCODE n'est pas défini, il l'exécute lorsque vous effectuez une mise à niveau une fois dans l'installation de mise à niveau et non dans l'ancienne et désinstallez explicitement le produit.

En raison de la façon dont vous avez écrit cela, vous rencontrerez toujours un problème lors de la mise à niveau de toutes les installations précédemment publiées. Vous pouvez contourner ce problème en modifiant votre planification de suppression des produits existants.

Si vous utilisez

<RemoveExistingProducts After="InstallInitialize" /> 

il va désinstaller la version précédente au début au lieu de la fin qui devrait fonctionner autour de l'exécution que DeleteourFiles action personnalisée deux fois.

Une autre chose à mentionner est que généralement vous ne planifiez pas explicitement « RemoveExistingProducts » dans les balises InstallExecuteSequence

Normalement, vous définirez cette programmation dans la balise MajorUpgrade

+0

Si je reprogrammer RemoveExistingProducts après InstallInitialize que je reste besoin de fournir la condition pour une action personnalisée? –

+0

Vous devriez puisque c'est le bon comportement. Vous devrez replanifier RemoveExistingProducts car la version actuellement installée de votre produit ne recevra pas la condition mise à jour de sorte qu'il supprimera toujours les fichiers lors de la désinstallation. –