Comment désinstaller un service Windows lorsqu'il n'y a plus d'exécutable sur le système?

166

Comment désinstaller un service Windows lorsqu'il ne reste plus d'exécutable sur le système? Je ne peux pas courir installutil -ucar il ne reste plus d'exécutable sur le système. Je peux toujours voir une entrée pour le service dans la console Services.

La raison de cet état est probablement due à un problème dans le package msi qui ne supprime pas correctement le service, mais comment le réparer une fois que le service est dans cet état?

Magnus Lindhe
la source

Réponses:

325

Vous devriez pouvoir le désinstaller à l'aide de sc.exe (je pense qu'il est inclus dans le Kit de ressources Windows) en exécutant ce qui suit dans une invite de commande «administrateur»:

sc.exe delete <service name>

<service name>est le nom du service lui-même tel que vous le voyez dans la console de gestion des services, et non celui de l'exe.

Vous pouvez trouver sc.exe dans le dossier System et il a besoin de privilèges administratifs pour s'exécuter. Plus d'informations dans cet article de la base de connaissances Microsoft .

Vous pouvez également appeler directement l' API DeleteService () . Cette façon est un peu plus complexe, car vous devez obtenir une poignée du gestionnaire de contrôle de service via OpenSCManager () et ainsi de suite, mais d'un autre côté, cela vous donne plus de contrôle sur ce qui se passe.

Treb
la source
Il a fait exactement ce que je voulais et a supprimé le service du registre. Il n'apparaît plus dans la console Services. Merci!
Magnus Lindhe
J'obtiens "Accès refusé". Que faire ensuite?
Nick
4
Juste une note pour quiconque essaie d'exécuter la commande dans la méthode 1 dans PowerShell: sc n'est pas pour communiquer avec le gestionnaire de contrôle de service. C'est la commande Set-Content. Utilisez plutôt sc.exe.
Yasser Sinjab
1
Si vous obtenez l'erreur 1072, assurez-vous que le panneau de configuration des services n'est pas ouvert (voir cette autre question )
Giles
J'obtenais l'erreur ci-dessous. [SC] OpenService FAILED 1060: Le service spécifié n'existe pas en tant que service installé. Plus tard, j'ai essayé la même chose avec Power Shell et cela fonctionne!
crazydan
24

Supprimer le service Windows via le registre

Il est très facile de supprimer un service du registre si vous connaissez le bon chemin. Voici comment j'ai fait ça:

  1. Exécutez Regedit ou Regedt32

  2. Accédez à l'entrée de registre "HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services"

  3. Recherchez le service que vous souhaitez supprimer et supprimez-le. Vous pouvez consulter les clés pour savoir quels fichiers le service utilisait et les supprimer également (si nécessaire).

Supprimer le service Windows via la fenêtre de commande

Vous pouvez également utiliser l'invite de commande et supprimer un service à l'aide de la commande suivante:

sc supprimer

Vous pouvez également créer un service à l'aide de la commande suivante

sc create "MorganTechService" binpath = "C: \ Program Files \ MorganTechSPace \ myservice.exe"

Remarque: vous devrez peut-être redémarrer le système pour mettre à jour la liste dans le gestionnaire de services.

kombsh
la source
3
Le faire de la manière du registre est-il sûr? Le "résultat final" du registre est-il le même que le "résultat final" de sc delete?
Pacerier
5
Non, j'ai juste essayé de supprimer directement un service de regedit. En conséquence, maintenant l'entrée du service que je voulais supprimer reste dans Service, tandis que la description de celui-ci indique: "<Impossible de lire la description. Code d'erreur: 2>"
GJ.
11

trouvé ici

Je viens d'essayer sous Windows XP, cela a fonctionné

ordinateur local: sc \\. supprimer [nom-service]

  Deleting services in Windows Server 2003

  We can use sc.exe in the Windows Server 2003 to control services, create services and delete services. Since some people thought they must directly modify the registry to delete a service, I would like to share how to use sc.exe to delete a service without directly modifying the registry so that decreased the possibility for system failures.

  To delete a service: 

  Click “start“ - “run“, and then enter “cmd“ to open Microsoft Command Console.

  Enter command:

  sc servername delete servicename

  For instance, sc \\dc delete myservice

  (Note: In this example, dc is my Domain Controller Server name, which is not the local machine, myservice is the name of the service I want to delete on the DC server.)

  Below is the official help of all sc functions:

  DESCRIPTION:
    SC is a command line program used for communicating with the
    NT Service Controller and services. 
  USAGE:
          sc
Fredou
la source
10

Voici le script PowerShell pour supprimer un service foo

$foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'"
$foo.delete()
Nima Soroush
la source
9

Ma façon préférée de faire cela est d'utiliser l' application Sysinternals Autoruns . Sélectionnez simplement le service et appuyez sur Supprimer.

Thomas Bratt
la source
Pourquoi ne pas simplement utiliser sc delete?
Pacerier
3

Créez une copie des exécutables du même service et collez-la sur le même chemin du service existant, puis désinstallez-la.

Samiksha
la source
C'est une bonne suggestion. Si cela ne fonctionne pas, il devra peut-être réinstaller, exécuter installutil -u, puis désinstaller
wcm
devons-nous créer la copie du même exe ou renommer un autre fichier fonctionnerait bien?
Imran Rizvi
@Samiksha, je pensais qu'il avait dit qu'il n'avait pas " une copie des exécutables "?
Pacerier