2017-02-01 3 views
0

J'ai un produit appelé MyApp. Ce produit est livré avec différentes éditions, comme BASIC et PRO. Les deux éditions ont leur propre programme d'installation avec la même version.Comment détecter le changement du code de package à mettre à jour (petite mise à jour)

Quand j'ai installé l'édition BASIC et exécuter le programme d'installation PRO, je veux InstallShield pour détecter. La constellation globale est illustrée dans l'image suivante.

  • UPCO = Code de mise à niveau
  • PRCO = Code produit
  • PaCo = package Code

enter image description here

Les flèches noires sont traitées comme des améliorations importantes sans problème. Les flèches rouges illustrent le problème.

détecter trop ce scénario, je pensais à la vérification du code de package modifié. Par le lien suivant ce scénario est défini comme Small Update.

http://helpnet.flexerasoftware.com/isxhelp22/isxhelp22.htm#CSHID=helplibrary%2FUpgradeConsiderations.htm|StartTopic=helplibrary%2FUpgradeConsiderations.htm

  1. Y at-il une propriété comme, IS_MINOR_UPGRADE ou IS_MAJOR_UPGRADE, que je peux utiliser?
  2. Est-il possible de trouver le code Package, le code de produit et de mise à niveau du code de l'installation précédente et actuelle? Ensuite, je pourrais comparer ces valeurs et répondre à ce scénario dans InstallScript.
+0

Pouvons-nous vous demander comment vous avez décidé de résoudre ce problème? Si la taille des produits n'est pas si différente, une option consiste à les fusionner à un seul programme d'installation et à utiliser les clés de licence d'application pour «déverrouiller» les fonctionnalités pro après l'installation. Vous pouvez également ajouter une fonctionnalité distincte à l'installation de base si la licence pro version est entrée. –

Répondre

1

Sauf si IS_MINOR_UPGRADE est défini dans ce scénario, il n'existe aucune propriété de ce type. Vous pourriez être en mesure d'écrire une action personnalisée qui examine les informations actuellement enregistrées sur le paquet installé (voir MsiGetProductInfo), mais vous pouvez exécuter rapidement dans les limites dont les API Windows Installer vous êtes autorisé à appeler l'intérieur d'une action personnalisée. En supposant qu'il existe différents fichiers entre vos éditions (c'est-à-dire des noms différents, pas seulement des versions différentes du même nom de fichier), je pense que vous allez avoir des problèmes pour déplacer "gauche" et "droite". Ce faisant, il est probable que les composants orphelins de la machine tournent au moins dans l'une des directions. Je suggère d'utiliser l'une de ces approches alternatives:

  • Utilisez un code de produits différents et peut-être aussi différents codes de mise à niveau (vous pouvez ajouter plusieurs mises à jour majeures d'employer une stratégie similaire à celle ISPreventDowngrade un afin d'éviter côte -side installs)
  • Refactor plus petites MSIs (par exemple un pour les fichiers partagés et un chacun pour les différents fichiers par édition, celle-ci peut être mutuellement exclusifs comme au point précédent) peut-être distribué par un projet Suite/UI avancée, ou
  • Utilisez des licences sans installation pour appliquer vos éditions
+0

Merci pour la réponse. Je peux donc utiliser MsiGetProductInfo pour obtenir le code de paquet en utilisant INSTALLPROPERTY_PACKAGECODE.Mais je ne sais pas comment obtenir le code de produit de la version installée précédente. Lorsque j'utilise la propriété liée à UpgradeTable, cela ne fonctionne que pour une mise à niveau majeure. Sinon, il est vide. –

+1

Pourquoi vous souciez-vous de PackageCode? Il doit être différent pour chaque nouveau MSI que vous créez, c'est-à-dire une mise à jour, une mise à niveau, un patch, etc. – PhilDW

+0

Vous avez raison. Le code du paquet est toujours différent. Je dois donc vérifier le même code de produit. Mais comment puis-je obtenir le code produit. Comme je l'ai déjà écrit, la table de mise à niveau est vide lorsque la version 2 de MyApp BASIC est installée et que j'exécute le programme d'installation de MyApp PRO version 2. –