9
votes

Est-il correct de planifier la suppression Exploitation des produits d'action personnalisée avant l'installationValidate?

problème

J'ai un MSI qui crée et crée un service Windows lors de l'installation et de l'arrêt et supprime le service pendant la désinstallation. Cela fonctionne bien lors de l'installation et de la désinstallation en soi, mais lors de la mise à niveau, la boîte de dialogue Utiliser est affichée (uniquement sur Vista et plus tard en raison du nouveau redémarrage gestionnaire ), indiquant que le service est utilisé.

Fond

Les fichiers utilisez la boîte de dialogue Utilisation s'affichent pendant la séquence Installexecute par la InstallValidate Action personnalisée, qui est programmée immédiatement avant la RetirerexistingProduits Action personnalisée; Cela signifie que la version précédente n'a pas encore été désinstallée, donc les fichiers utilisez dialogo doivent être montrés .

La documentation MSDN indique que l'action RetirerSimexististingProduits doit être programmée après l'action InstallValidate , et j'ai actuellement les actions supprimer des produits sont programmés immédiatement après l'action action d'installation .

Solution potentielle

Je tiens à reprogrammer l'action personnalisée SupprimerExistingProduits à l'action immédiate avant l'action personnalisée d'installvalidate afin que l'installation précédente ait une chance d'arrêter et de supprimer le service avant le < Strong> Les fichiers utilisés sur sont affichés. J'ai essayé de reprogrammer les actions, et il semble fonctionner correctement sans effets secondaires indésirables (bien que le journal indique toujours que l'action InstallValidate Exécute avant l'action supprimer action), mais Je suis hésitant à utiliser cette solution puisqu'elle viole la documentation MSDN, et il peut y avoir des effets indésirables que je ne vois pas encore.

Quelqu'un a-t-il essayé cela? La seule autre alternative à laquelle je peux penser est d'avoir la nouvelle installation arrêter le service de l'ancienne installation, mais cela n'est pas souhaitable car elle nécessite que l'installation ait des informations sur toutes les anciennes installations qu'il peut mettre à niveau (l'arrêt de ce service particulier peut impliquer davantage. qu'un simple appel simple au gestionnaire de service pour l'arrêter).


0 commentaires

4 Réponses :


0
votes

Un problème potentiel serait que si l'utilisateur annule lors de l'installation d'installationValidate (par exemple, de ne pas suffisamment d'espace disque ou d'un fichier utilisé) ou pendant l'installation, quel est le comportement de restauration. La situation idéale est que l'état de l'application est identique à celui qu'il était avant (par exemple, l'application précédente est installée). Vous pourriez vous donner cela avec votre séquençage, bien que la restauration soit une fonctionnalité que vous puissiez vivre sans.


1 commentaires

C'est étrange, mais j'ai observé (en surveillant les boîtes de dialogue d'installation et en regardant le journal) que l'action InstallValidate semble être exécutée avant l'action Retirez les produits même s'ils 'Regalisé dans l'ordre inverse; Les planifiants de cette façon résoudent mon problème, même si je ne peux pas expliquer le comportement. De plus, dans les scénarios, j'ai testé, la restauration a toujours fonctionné correctement. Je vais devoir le tester plus soigneusement en fonction de votre suggestion.



6
votes

J'ai mis en place la solution potentielle décrite dans la question, planifiant supprimer des produits immédiatement avant InstallValidate . Je n'ai pas encore vu de problèmes, mais je posterai à nouveau après que l'installation soit plus utilisée.

mise à jour

Notre installation utilise cela depuis un certain temps et je n'ai pas remarqué d'effets néfastes.


1 commentaires

J'ai essayé , mais il en résulte une violation de ICE27: Action "RetirerExististingProduits" dans la table Installexecutequence au mauvais endroit. Courant: Sélection, correct: exécution



2
votes

Son a déjà été intégré à l'installateur MSI / Windows ... Le seul problème est que les classes d'installateurs .NET n'utilisent pas les fonctionnalités "Installation de service" MSI. Ce qui se passe effectivement est que le MSI essaie d'installer des fichiers et d'exécuter une commande personnalisée à l'aide des fichiers simplement copiés (c'est-à-dire que tous les studios visuels se mettent dans le MSI).

Pour résoudre ce problème, vous pouvez modifier le MSI avec ORCA et Ajoutez la ligne suivante à la ServiceControl Strong> Table : P>

1   ServiceName 170     1   C__489628C5CC1144CB47F43E8BE7F3F31D


0 commentaires

0
votes

Je pense que celui-ci vous aidera sans violer la documentation MSDN et éviter les problèmes futurs. Placez une condition "installée ou précédemmentInstallée" et vous serez bien à la mise à niveau depuis la mise à niveau car la propriété précédenteSInSInstallé est définie avant l'action InstallValidate lors des produits FindRelatedProduits. Je ne sais pas pourquoi, mais la propriété précédemmentInstallée n'est pas documentée dans MSDN, mais elle existe et très utile, pour moi.


0 commentaires