Question

J'ai mis à niveau un [projet de générateur MSI .vdproj intégré à VS2008] System.Configuration.Install.Installer avec un ServiceProcessInstaller et un ServiceInstaller de Visual Studio 2005 à 2008.Il n'y a aucune personnalisation ayant des conséquences pour la classe d'installation (c'est-à-dire ne pas essayer de démarrer ou d'arrêter les services ou d'enregistrer les enfants)

RemovePreviousVersions est réglé sur true, et je change le Version et ProductCode.Cela déclenche une erreur lors de l'installation :

"erreur 1001 :le service spécifié existe déjà"

La recherche sur Google donne des résultats (mais pas sur SO jusqu'à présent) : - Google pour "Le service spécifié existe déjà"
Le plus utile que j'ai vu à ce jour est http://forums.msdn.microsoft.com/en-US/winformssetup/thread/b2d1bd22-8499-454e-9cec-1e42c03e2557/cependant, cela ne répond pas à la question fondamentale : -

Étant donné que l'utilisateur peut choisir soit :
a) un emplacement d'installation identique
ou b) un emplacement d'installation différent
Quelles sont les modifications minimales de code qu'il serait raisonnable d'apporter pour garantir que l'ancien service soit désinstallé et que le nouveau soit installé ?Ou y a-t-il autre chose qu'un changement de code requis pour résoudre ce problème pour le scénario de base de mise à niveau de la version 1.0.1 vers la version 1.0.2 du même service avec le même nom (c'est-à-dire la signature)

(AIUI, le nom fort n'entre en jeu que s'il y a une étape de désinstallation importante dans l'ancien programme d'installation que vous n'avez pas dans le nouveau.)

J'ai généré un nouveau programme d'installation dans VS 2008 et il ne s'en sort pas mieux.

Pour l'instant, ma solution consiste à arrêter de mettre à jour le Version et ProductCode, obligeant l'utilisateur à désinstaller manuellement lorsqu'on lui dit qu'il a déjà une version installée.

Addendum merci à de Divo sondage:Bien que le hack le plus simple qui puisse fonctionner soit de dire "si l'étape d'installation est appelée et qu'il s'agit d'une mise à niveau, appelez d'abord l'étape de désinstallation du service", j'aimerais une bonne réponse officiellement bénie !(par exemple, comment un simple hack s'en sort-il lorsque le service est renommé lors d'une mise à niveau ?)

Était-ce utile?

Autres conseils

Votre service (configuration) propose-t-il une action personnalisée pour désinstaller le service ?

Une mise à niveau signifie que le produit précédemment installé est désinstallé avant l'installation du nouveau produit.Je pense que la raison de l'erreur est que l'ancien service ne peut pas être supprimé.

Si votre service est écrit en .NET, cet article pourrait vous être utile :http://www.codeproject.com/KB/install/InstallService.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top