2009-10-16 7 views
0

Nous installons un service de fenêtres à partir d'une action personnalisée comme décrit ici: CodeProjectC# - programme d'installation de Windows échoue dans l'action personnalisée

Chaque si souvent, lors de la désinstallation de notre application, il ne traite pas correctement désinstaller le service. Au lieu de cela, il "marque le service pour la suppression".

Vous pouvez voir ce message en exécutant installutil.exe /u sur notre exécutable, lorsqu'il est supposé désinstallé.

Quelqu'un at-il vu ce problème ou connaissez-vous une solution de contournement? Si un service est en quelque sorte installé avec le même nom que le nôtre, nous aimerions le remplacer. Au lieu de cela, l'installation de msi échoue, donnant un message indiquant que notre service est déjà installé.

Existe-t-il un moyen de le faire sans effectuer d'action personnalisée pour désinstaller d'abord les instances existantes du nom de notre service avant d'exécuter l'action personnalisée d'installation?

Répondre

3

Le panneau de contrôle de service (services.msc) est-il ouvert pendant la désinstallation? Cela empêche votre service de correctly being uninstalled.

Si rien d'autre ne vous aide, un redémarrage peut être requis comme recommandé dans this article (bien qu'appliqué à l'origine pour .NET 1.1).

+0

Il se peut que nous vous demandions de redémarrer lors de la désinstallation. Cela semble être une bonne solution. Je vais vous marquer comme la réponse dans un jour ou deux, si personne n'a une meilleure solution. – jonathanpeppers

+0

J'espère que vous trouverez une meilleure solution que le redémarrage. Avez-vous vérifié avec Process Explorer que le processus de service n'est plus en cours d'exécution? Si elle est toujours en cours d'exécution, vous pouvez étudier le processus avec Process Explorer (voir Exécuter des threads, ouvrir des handles, dll chargées). –

+0

Lorsque dans cet état, notre processus n'est plus en cours d'exécution et notre MSI a supprimé l'exécutable du système de fichiers. Cependant, notre service est toujours répertorié dans services.msc et si vous exécutez la commande "net start". Il est malheureusement très difficile à reproduire et je ne pense pas que cela arrive chaque fois que vous avez ouvert services.msc lors de la désinstallation. Le redémarrage semble être la seule chose qui va vraiment le réparer, Windows attend que le PC redémarre avant de supprimer le service. – jonathanpeppers

0

Vérifiez si votre service arrête correctement les threads supplémentaires démarrés à partir du service.

+0

Tous nos threads sont ThreadPool threads, donc cela ne devrait pas être un problème. – jonathanpeppers

Questions connexes