2017-06-06 2 views
2

Scénario:Mise à niveau de l'installation VS MSI MSI à Wix être traités comme désinstaller

Nous avons utilisé VS 2010 projet d'installation jusqu'à présent. Migration de nouvelles générations vers Wix.

Problème:

Msiexec est le traitement de la mise à niveau comme non installer + frais installer au lieu de simplement mettre à jour.

Détails:

  • J'ai utilisé la même UpgradeCode Guid pour la nouvelle configuration WIX
  • J'ai ajouté MajorUpgrade tag au besoin
  • J'ai aussi essayé d'utiliser Upgrade et UpgradeVersion place de MajorUpgrade
  • Le numéro de version est mis à jour
  • J'ai restructuré WXS pour voir si elle est le problème et ce n'est pas

Remarque - système reconnaît correctement à la fois comme produit et même lors de l'installation supprime automatiquement l'ancienne.

Le problème est que l'ancien produit est en cours de désinstallation plutôt que de mise à niveau. J'ai une action personnalisée définie pour s'exécuter pendant la désinstallation, ce qui va supprimer les données utilisateur. Maintenant, le problème est, cette action personnalisée est déclenchée pendant la mise à niveau pour une raison quelconque.

Ce problème ne se produit pas si c'est 2010 to 2010 ou Wix to Wix, seulement si elle est 2010 to Wix.

Scénarios

  • 1,0 (construit en utilisant 2010) -> 1.1 (construit en utilisant 2010) - Aucune action personnalisée déclenchée
  • 1.0 (construit en utilisant 2010) -> 1.1 (construit en utilisant Wix) - Désinstaller action personnalisée
  • 1,1 (construit en utilisant Wix) -> 1.2 (construit en utilisant Wix) - Aucune action personnalisée déclenchée

La seule différence que je l'ai remarqué dans les journaux -

Pour VS 2010 à 2010

Action ended: MsiUnpublishAssemblies. Return value 1. 
MSI (s) (90:A4) : Skipping action: _[guid].uninstall.SetProperty (condition is false) 
MSI (s) (90:A4): Skipping action: _[guid].uninstall (condition is false) 
MSI (s) (90:A4) [21:54:10:299]: Doing action: UnpublishComponents 
Action start 21:54:10: UnpublishComponents. 

Pour 2010 à Wix -

MsiUnpublishAssemblies. Return value 1. 
Doing action: [guid].uninstall.SetProperty 
Action start : [guid].uninstall.SetProperty. 
MSI (s) (90:D4) : 
Note: 
1: 2235 
2: 
3: ExtendedType 
4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = '[guid].uninstall.SetProperty' 
MSI (s) (90:D4) : PROPERTY CHANGE: Adding [guid].uninstall property. Its value is '/installtype=notransaction /action=uninstall /LogFile= ... "[custom-action].exe" "oldmsi.tmp"'. 
Action ended _[guid].SetProperty. Return value 1. 
MSI (s) (90:D4) : Doing action: _[guid].uninstall 
Action start : _[guid].uninstall. 
MSI (s) (90:D4): 
Note: 
1: 2235 
2: 
3: ExtendedType 
4: SELECT `Action`,`Type`,`Source`,`Target`, NULL, `ExtendedType` FROM `CustomAction` WHERE `Action` = '_[guid].uninstall' 
Action ended: _[guid].uninstall. Return value 1. 
MSI (s) (90:D4): Doing action: UnpublishComponents 
Action start : UnpublishComponents. 

Je suis désemparés pourquoi cette désinstallation est en cours. Toute aide est appréciée.

Répondre

2

Il n'y a pas assez d'informations pour être sûr, mais cela devrait aider:

Une mise à jour majeure désinstalle toujours le produit en cours de modernisation. C'est la définition d'une mise à jour majeure basée sur le nouveau ProductCode, le même UpgradeCode et la version incrémentée et le même contexte d'installation. Cela signifie que votre problème dépend de vos hypothèses sur une «action personnalisée de désinstallation»

Les actions personnalisées «désinstaller» de Visual Studio ne sont pas vraiment des actions personnalisées de «désinstallation». Ils sont appelés lorsque le composant (indiqué par l'identifiant du composant) est supprimé. Lorsque vous passez de VS 2010 construit à VS 2010 construit, l'identifiant du composant reste le même (ref interne) et le composant reste installé. La même chose arrive avec les builds WiX. Quand vous allez de VS 2010 construit à WiX construit les identifiants de composants ont probablement changé, par conséquent le composant du VSM construit VS 2010 est supprimé, donc l'action personnalisée est appelée. En d'autres termes, il est fort probable que les identifiants des composants de votre build VS 2010 (que vous ne pouvez pas voir car VS 2010 ne suggère même pas leur existence) ne sont pas identiques aux identifiants des composants de votre build WiX. .

+0

Ok. Je vais voir si je peux faire correspondre les identifiants en utilisant Wix's Dark et voir si ça va aider. Savez-vous d'une solution de contournement où je peux empêcher l'exécution de l'action personnalisée de désinstallation dans le msi déjà installé? – Makubex

+0

Si vous utilisez "NOT UPGRADINGPRODUCTCODE" dans les conditions de l'action personnalisée de désinstallation, il ne sera pas exécuté lors de la désinstallation suite à une mise à niveau, mais uniquement lors de la désinstallation complète du produit. –

+1

La logique de désinstallation est "codée en dur" lors de la désinstallation de ce produit plus ancien, vous ne pouvez donc pas le modifier à moins de patcher cet ancien produit. La condition "NOT UPGRADINGPRODUCTCODE" s'applique à l'ancien produit en cours de désinstallation/mise à niveau. Vous ne pouvez donc pas l'ajouter à l'ancien produit sans le corriger. – PhilDW