J'ai un service Windows écrit en C# en utilisant VS2005.Comment persuader un VS2005 msi de mettre à niveau?
L'installation s'effectue via un assistant qui appelle msiexec pour installer le fichier msi également créé avec VS2005.
Je rencontre des problèmes pour générer un fichier msi qui sera mis à niveau d'une version du service à une autre. Le programme de l'assistant gère la détection de la version actuellement installée, en arrêtant le service, en proposant une ligne de commande appropriée pour msiexec, puis en redémarrant le service.
Le fichier msi existant a une propriété version de 1.1.02, la nouvelle version est 1.1.03. Les codes de produit et de mise à niveau sont identiques.
La désinstallation manuelle de la version 1.1.02 via les programmes d'ajout/suppression fonctionne correctement, tout comme l'installation de la version 1.1.03 sur un système "propre".
La mise à jour de 1.1.02 à 1.1.03 passe par les mouvements mais le résultat final est 1.1.02 installé.
La ligne de commande que l'assistant utilise pour la mise à niveau est:
msiexec/qb/i "MyProduct.msi" REINSTALL = "ALL" REINSTALLMODE = "vos"
Où vais-je tort? Je suppose que j'ai dû manquer quelque chose d'assez fondamental ...
La position de repli est d'informer les clients qu'ils doivent désinstaller manuellement 1.1.02 avant d'exécuter l'assistant pour installer 1.1.03 mais je préfère pas besoin de faire ça.
Sous la direction d'ajouter:
Modification du code du produit (comme VS2005 vous invite également à) supprime effectivement la possibilité de mettre à niveau à tout, comme l'installateur ne vous laissera pas faire une réinstallation si ce code produit hasn pas déjà été installé.
Tout ce qu'il vous laissera alors est installer (et alors vous obtenez le message habituel "service existe déjà").
Oui, cela a été fait correctement. A fini par renoncer à cela et a eu recours à faire de l'assistant la désinstallation suivie d'une nouvelle installation si elle détecte déjà une ancienne version en place. Semble fonctionner correctement et permet aux utilisateurs finaux de mettre à niveau sans devoir manipuler manuellement quoi que ce soit. –
Aussi, pour autant que je puisse le constater, les MSI construits par Visual Studio sont apparemment connus pour ne pas vous permettre de mettre à niveau les services, donc en faisant le travail dans l'assistant, j'ai évité de tomber dans le piège suivant. –
+1 mais pour le rendre complètement clair, cela signifie mettre à jour la version du fichier du projet MAIN (pas le projet d'installation!). –