2009-09-15 4 views
16

Même après un redémarrage, le service est toujours là, même si le fichier exécutable est parti. J'utilise WIX version 3.0.5419.0Pourquoi mon service n'est-il pas supprimé lors de la désinstallation? (WIX)

<Component Id="IdiomServer.exe" Guid="7a751e1e-5e9e-41d2-be60-dc905ab1ccad"> 
    <File Id="IdiomServer.exe" Source="$(var.IdiomServer.TargetDir)IdiomServer.exe" KeyPath="yes" /> 
    <ServiceInstall Id="IdiomServer_Service" Name="IdiomServer 4.0" Account="LocalSystem" Description="Idiom Repository Server" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes" /> 
    <ServiceControl Id="IdiomServer_Service" Name="IdiomServer 4.0" Remove="uninstall" Stop="uninstall" Wait="yes" /> 
</Component> 

L'installation du service Windows fonctionne correctement. La désinstallation semble ne rien faire. Section du fichier journal de la désinstallation:

MSI (s) (D8:5C) [09:43:58:033]: Doing action: StopServices 
MSI (s) (D8:5C) [09:43:58:033]: Note: 1: 2205 2: 3: ActionText 
Action start 9:43:58: StopServices. 
Action ended 9:43:58: StopServices. Return value 1. 
MSI (s) (D8:5C) [09:43:58:033]: Doing action: DeleteServices 
MSI (s) (D8:5C) [09:43:58:033]: Note: 1: 2205 2: 3: ActionText 
Action start 9:43:58: DeleteServices. 
Action ended 9:43:58: DeleteServices. Return value 1. 

Toute aide serait grandement appréciée.

Répondre

13

J'ai un programme d'installation presque identique qui fonctionne très bien. Les seules différences sont que mon élément ServiceControl a un Id différent de l'élément ServiceInstall, et une propriété 'Start = "install"' aussi.

Je soupçonne que votre problème est soit l'ID de l'élément ServiceControl, ou vous avez un service errant qui traîne.

les opérations suivantes:

  • changer l'ID ServiceControl à « IdiomServer_ServiceControl »
  • Modifier le nom dans les deux éléments de service à « Foobar » et vérifier si le service Foobar est à la fois installé et désinstallé. Si cela fonctionne, vous devrez peut-être supprimer manuellement l'entrée IdiomServer avec la commande "sc".
+2

Fermez.Le problème n'était pas les identifiants mais le Component/@ Guid. Une fois que j'ai changé cela, la désinstallation fonctionne bien. Le Guid du composant de service doit apparemment être modifié avec Product/@ Id lors de la création d'une nouvelle version du produit. –

+1

Ce n'est pas vrai. Changer le composant/@ Guid signifie que toutes les ressources contenues dans le composant doivent également changer. C'est une restriction MSI communément appelée "Règles des composants". Vous verrez un comportement de mise à niveau et de désinstallation très bizarre lors du changement de Component/@ Guids. Un fichier journal détaillé de la désinstallation d'origine doit indiquer pourquoi ServiceControl n'a pas supprimé votre service. –

+0

Voir l'entrée de blog de Rob, http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101, pour une description de la raison pour laquelle la modification de l'ID de composant sans changer les ressources est une mauvaise chose. – Martin

1

Si la modification du guid composant a travaillé, je pense que la question pourrait se rapporter à un compteur de ref erronous SharedDLL dans le registre: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ SharedDlls

Ce sont des compteurs de référence de style hérité que MSI peut incrémenter (si on le lui demande) - et ils remplaceront le propre comptage de référence de MSI. Pour une raison stupide, Installshield incrémente le nombre de ref existants pour tous les fichiers (qu'ils soient versionnés ou non), ce qui rend souvent mystérieux les «fichiers parasites lors de la désinstallation» survenant sur les PC de développement. La même chose peut se produire dans Wix si vous activez le compte ref dll partagé et dans de rares cas, le nombre de ref peut être corrompu lors des mises à niveau majeures.

1

J'ai eu un problème similaire à celui décrit par Rupert. Dans mon cas, le service n'a pas été désinstallé du Gestionnaire de contrôle des services et le fichier .exe a également été laissé en arrière. Après beaucoup de creuser la réponse était assez simple. Dans l'élément <composant>, l'attribut GUID a été défini sur "" (c'est-à-dire chaîne vide). Remplacement avec < Composant ... GUID = "56CD2588-B976-4198-B815-FAB7E1E57CD7" > résolu le problème

11

J'ai également eu un problème similaire. Dans mon cas, je devais juste m'assurer que les attributs "Name" de ServiceInstall et de ServiceControl sont les mêmes, et le problème a disparu.

+0

Je viens de passer 2 jours à essayer différentes choses avec wix et le programme d'installation Windows essayant de traquer un comportement étrange (sans désinstaller le service) avec un service utilisant l'élément MajorUpgrade. Après avoir apporté de nombreux changements à mon fichier Wix, j'ai repéré cela, j'ai réalisé que j'avais le même problème, changé les noms, supprimé tous mes autres changements et tout fonctionne bien! Si je pouvais voter plus d'une fois, je le ferais! :) – thudbutt

+0

c'était la raison pour laquelle j'échouais. Maintenant, je regarde - bien sûr, cela semble évident. Je vous remercie –

2

J'ai eu le même problème de suppression du service. J'ai copié les éléments Component, Service Install et ServiceControl d'un autre projet sans modifier le Guid ou les ID. Après la mise à jour avec de nouveaux GUID et ID, le service est maintenant supprimé.

0

J'ai eu un problème similaire. C'est-à-dire la désinstallation supprimée allout MAIS l'entrée dans la liste des services (Win 7 - admin local). J'ai d'abord installé à partir d'un partage réseau et c'était lorsque la désinstallation ne s'est pas terminée. Lors de la copie du programme d'installation sur un disque local avant l'installation, la désinstallation a tout simplement fonctionné!

Questions connexes