web-dev-qa-db-fra.com

Comment résoudre l'erreur "Le service spécifié a été marqué pour suppression"

J'essaie de supprimer un service Windows avec sc delete <service name> et rencontre l'erreur suivante:

[SC] DeleteService FAILED 1072:

Le service spécifié a été marqué pour suppression.

Ce que j'ai déjà fait:

Le problème persiste.

Quelle est la prochaine étape?

477
Arseni Mourzenko

Plusieurs causes peuvent conduire au blocage du service dans la mention «marqué pour suppression».

  1. L'explorateur de processus de SysInternals est ouvert . Sa fermeture devrait entraîner la suppression automatique du service.

  2. Le gestionnaire de tâches est ouvert .

  3. Microsoft Management Console (MMC) est ouvert . Pour vous assurer que toutes les instances sont fermées, exécutez taskkill /F /IM mmc.exe.

  4. La console de services est ouverte . Ceci est identique au point précédent, car la console Services est hébergée par MMC.

  5. L'observateur d'événements est ouvert . Encore une fois, ceci est identique au troisième point.

  6. La clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{nom du service} existe .

  7. Quelqu'un d'autre est connecté au serveur et l'une des applications précédemment mentionnées est ouverte.

  8. Une instance de Visual Studio utilisée pour déboguer le service est ouverte.

1032
Arseni Mourzenko

Cela peut également être causé en laissant la console Services ouverte. Windows ne supprimera pas le service tant qu'il ne sera pas fermé.

176
forcedfx

Dans mon cas, cela a fonctionné après la fermeture de la Services. Vérifiez si le Services.msc est ouvert, si oui, fermez-le et vérifiez si un processus de service est trouvé dans Task Manager.

35
Sumit Agrawal

Salut les gars, j'ai eu le même problème, finalement je décide de tuer le processus de service.

pour cela, essayez les étapes ci-dessous:

  • obtenir l'identifiant du processus de service avec

    sc queryex <service name>

  • tuer le processus avec 

    taskkill /F /PID <Service PID>

34
Ali Sadri

La suppression des clés de registre, comme suggéré ci-dessus, a bloqué mon service dans l'état d'arrêt. La procédure suivante a fonctionné pour moi: 

ouvrez le gestionnaire de tâches> sélectionnez l'onglet Services> sélectionnez le service> cliquez avec le bouton droit de la souris et sélectionnez "Accéder au processus"> cliquez avec le bouton droit sur le processus et sélectionnez Arrêter le processus

Le service devrait être parti après cela

8
mathart63

Cela signifie que le service est toujours répertorié comme désactivé dans services.msc . Fermez simplement le service.msc et ouvrez-le à nouveau en tant qu'administrateur .... Le service ne sera pas répertorié. Maintenant, installez le service en utilisant la commande,

installutil "chemin du service"

7
Amey P Naik

Voici ce qui a fonctionné pour moi: Mon service s’affiche comme étant en cours d’exécution, bien qu’il ait déjà été désinstallé. Réception d'un message d'erreur indiquant que le service n'est pas en état de recevoir des messages de contrôle . Néanmoins, le service a été arrêté .- Services.msc .- fermés. Services.msc . - Le service avait disparu (ne figurait plus dans la liste des services).

(L'environnement était Windows 7.)

6
balintn

Il semble que sur les versions de Windows ultérieures à Windows 7 (non vérifiées, mais plus récentes de Windows Server 2012 R2), le gestionnaire de contrôle de service (SCM) est plus strict.

Tandis que sur Windows 7, il crée simplement un autre processus, il vérifie maintenant si le processus de service est toujours actif et peut renvoyer ERROR_SERVICE_MARKED_FOR_DELETE (1072) pour tout appel ultérieur à CreateService/DeleteService, même si le service semble être arrêté.

Je parle de code API Windows ici, mais je veux décrire clairement ce qui se passe, donc cette séquence peut conduire à l'erreur mentionnée:

SC_HANDLE hScm = OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS);

SC_HANDLE hSvc = OpenService(hScm, L"Stub service", SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);

SERVICE_STATUS ss;
ControlService(hSvc, SERVICE_CONTROL_STOP, &ss);
// ... wait for service to report its SERVICE_STOPPED state

DeleteService(hSvc);
CloseServiceHandle(hSvc);
hSvc = nullptr;

// any further calls to CreateService/DeleteService will fail
// if service process is still around

La raison pour laquelle un processus de service est toujours actif après avoir déjà signalé son état SERVICE_STOPPED n'est pas surprenante. Il s'agit d'un processus régulier dont le thread principal est «bloqué» dans son appel à l'API StartServiceCtrlDispatcher. Il réagit donc d'abord à une action de contrôle d'arrêt, puis doit exécuter la séquence de code restante.

Il est regrettable que le SCM/OS ne gère pas cela correctement pour nous ..__ Une solution programmatique est un peu simple et précise: obtenez le descripteur de processus de l'exécutable de service avant d'arrêter le service, puis attendez que ce descripteur soit signalé.

Si vous abordez le problème du point de vue de l'administration système, la solution consiste également à attendre que le processus de service disparaisse complètement.

6
klaus triendl

Découvert une dernière chose à vérifier - regardez dans le Gestionnaire des tâches - si d'autres utilisateurs sont connectés à cette boîte, même s'ils sont "déconnectés", vous devez les déconnecter pour que le service soit enfin supprimé.

6
Kathy Gryta

Dans mon cas, j'exécute taskkill /f /im dongleserver.exe, Où dongleserver.exe est le fichier exe de mon programme.

Ensuite, je peux déjà réinstaller mon programme.

5
Sian Chiew See

Dans mon cas, cela était dû à une exception non gérée lors de la création de la source eventLog. Utilisez try catch pour identifier la cause.

4
Arijus Gilbrantas

La fermeture de chaque fenêtre actuellement ouverte suivie de l'exécution de la commande suivante a résolu le problème pour moi:

taskkill /F /IM mmc.exe
3
Tshilidzi Mudau

Si les étapes fournies par @MainMa n'ont pas fonctionné, suivez les étapes suivantes

Étape 1 Essayez de supprimer le processus à partir du gestionnaire de tâches Windows ou d’utiliser taskkill/F/PID. Vous pouvez trouver le pid du processus avec la commande 'sc queryex'. Essayez la prochaine étape si vous ne pouvez toujours pas désinstaller.

Étape 2 Si ci-dessus 

Exécuter Autoruns pour Windows Rechercher un service par son nom et supprimer les résultats.

0
Charith

étapes à suivre:

step-1 goto l'emplacement C:\Windows\Microsoft.NET\Framework\v4.0.30319

step-2 run commande: installutil/u chemin-complet/nom_serveur.exe

step-3 fermez le panneau de services et rouvrez-le

step-4 run commande: installutil chemin-complet/nom_service.exe

0
Divyang Shah

J'avais ce problème lorsque j'utilisais Application Verifier pour vérifier mon service Win. Même après avoir fermé App Ver, la suppression de mon service était bloquée. Seule la suppression du service de App Ver a résolu le problème et le service a été supprimé immédiatement. On dirait qu'un processus utilise toujours votre service après avoir essayé d'en supprimer un.

0
vadzvnik

La raison principale de l’erreur est que le processus n’est pas arrêté .. pour le résoudre, ouvrez le gestionnaire de tâches et accédez aux services pour voir si vous pouvez toujours voir votre service, puis passez au processus de ce service et à la fin du processus. Alors le problème sera résolu complètement.

0
Gaurav Tyagi

Très probablement, la suppression du service échoue car 

protected override void OnStop()

jeter une erreur lors de l'arrêt d'un service. Envelopper des objets dans un catch try empêchera le marquage d'erreur de suppression 

protected override void OnStop()
{
            try
            {
                //things to do
            }
            catch (Exception)
            {
            }

}

0
e03050