199 votes

Comment forcer la désinstallation d'un service Windows

J'ai installé un service Windows en utilisant installUtil.exe.

Après avoir mis à jour le code, j'ai de nouveau utilisé installUtil.exe pour installer le service sans désinstaller la version originale au préalable.

Lorsque j'essaie maintenant de désinstaller le service, installUtil.exe effectue la désinstallation avec succès, mais le service apparaît toujours.

Si j'essaie de modifier ses propriétés, je reçois le message "service is marked for deletion".

Comment puis-je forcer la suppression (de préférence sans redémarrer le serveur) ?

0 votes

Si le service est suspendu et que la suppression ne fonctionne pas, voir Comment forcer la désinstallation d'un service Windows

3voto

Tan Points 213

Au cas où cette réponse aiderait quelqu'un : tel que trouvé aquí vous pourriez vous épargner beaucoup d'ennuis lors de l'exécution de votre projet. Sysinternals Autoruns en tant qu'administrateur. Il suffit d'aller dans l'onglet "Services" et de supprimer votre service.

Il a fait l'affaire pour moi sur une machine où je n'avais pas la permission d'éditer le registre.

3voto

Vous pouvez supprimer manuellement la clé de registre de votre service, située à l'adresse suivante HKLM\SYSTEM\CurrentControlSet\Services Après cela, vous ne verrez plus le service dans le gestionnaire de contrôle des services (vous devrez l'actualiser ou le rouvrir pour voir le changement), et vous pourrez réinstaller le service comme d'habitude.

2voto

Dmitry Points 106

La procédure suivante fonctionnera sans redémarrer la machine :

  1. Recherchez dans le registre HKEY_LOCAL_MACHINE le nom de votre service (clés et valeurs).
  2. Régler la valeur "Legacy" à 0

1voto

faulty Points 3342

Avez-vous essayé d'arrêter le service avant d'appeler la désinstallation ? J'ai eu ce problème de manière aléatoire. Parfois, je pouvais le supprimer sans redémarrer. Je pense que c'est lié au fait que le service est toujours en cours d'exécution.

1voto

marco Points 113

Je suis en retard, mais je voudrais ajouter une alternative, qui peut sembler étrange, mais je n'ai pas vu d'autre moyen :

Comme j'installe chaque nuit mes services Windows dans le cadre d'un processus CI, j'avais besoin de quelque chose qui fonctionne tout le temps et qui soit complètement automatisé. Pour une raison quelconque, les services étaient toujours marqués pour suppression pendant une longue période (5 minutes ou plus) après leur désinstallation. J'ai donc étendu le batch de réinstallation script pour m'assurer que le service est réellement supprimé (version simplifiée) :

REM Stop the service first
net stop My-Socket-Server

REM Same as installutil.exe, just implemented in the service
My.Socket.Server.exe /u

:loop1
    REM Easy way to wait for 5 seconds
    ping 192.0.2.2 -n 1 -w 5000 > nul
    sc delete My-Socket-Server
    echo %date% %time%: Trying to delete service.
    if errorlevel 1072 goto :loop1

REM Just for output purposes, typically I get that the service does not exist
sc query My-Socket-Server

REM Installing the new service, same as installutil.exe but in code
My.Socket.Server.exe /i

REM Start the new service
net start My-Socket-Server

Ce que je vois, c'est que le service est marqué pour suppression pendant environ 5 minutes ( !) jusqu'à ce que la suppression soit finalement effectuée. Enfin, je n'ai plus besoin d'interventions manuelles. Je vais étendre le script à l'avenir pour que quelque chose se produise après un certain temps (par exemple, une notification après 30 minutes).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X