Question 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 rencontrez 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?


437
2017-12-13 08:20


origine


Réponses:


Il peut y avoir plusieurs causes qui conduisent à ce que le service soit bloqué "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 des 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. C'est le même que le point précédent, puisque la console Services est hébergée par MMC.

  5. L'observateur d'événements est ouvert. Encore une fois, c'est le même que le troisième point.

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

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

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


928
2017-12-13 11:23



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


159
2018-01-23 13:51



Dans mon cas, cela a fonctionné après la fermeture du 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.


33
2017-11-03 06:38



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'ID de processus de service avec

    sc queryex <service name>

  • tuer le processus avec

    taskkill /F /PID <Service PID>


30
2018-02-10 05:08



La suppression des clés de registre comme suggéré ci-dessus a permis à mon service de rester bloqué. 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 "Aller à la procédure"> cliquez avec le bouton droit sur le processus et sélectionnez Terminer le processus.

Le service devrait être parti après ça


8
2017-10-12 18:22



Découvert une chose de plus à vérifier - regarder 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 signer pour obtenir la suppression définitive du service.


6
2018-02-20 15:42



C'est ce qui a fonctionné pour moi: - J'ai rencontré le même problème: mon service était bloqué dans «marqué pour suppression». - J'ai ouvert services.msc   Mon service s'est révélé être en cours d'exécution, même s'il a déjà été désinstallé. - J'ai cliqué sur Stop   Reçu 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 fermés.msc. - Services réadmis.msc.   - Le service a disparu (ne figure plus dans la liste des services).

(L'environnement était Windows 7.)


6
2018-05-09 10:55



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

installutil "chemin du service"


6
2018-03-23 09:10



Dans mon cas, il a été provoqué par une exception non gérée lors de la création de la source eventLog. Utilisez try catch pour épingler la cause.


4
2018-03-20 14:01



Il semble que sur les versions de Windows ultérieures à Windows 7 (non vérifiées, mais par expérience récente avec Windows Server 2012 R2), le Gestionnaire de contrôle des services (SCM) soit plus strict.

Alors que sur Windows 7, il génère simplement un autre processus, il vérifie maintenant si le processus de service est toujours là 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éfinir clairement ce qui se passe, donc cette séquence peut conduire à une 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 présent après avoir déjà signalé son état SERVICE_STOPPED n'est pas surprenante. C'est un processus régulier, dont le fil principal est «coincé» dans son appel à la StartServiceCtrlDispatcher API, donc il réagit d'abord à une action de contrôle d'arrêt, mais doit ensuite exécuter sa séquence de code restante.

C'est un peu dommage que le SCM / OS ne gère pas cela correctement pour nous. Une solution programmatique est assez simple et précise: obtenez le descripteur de processus de l'exécutable du 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.


4
2018-02-02 15:03



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.


4
2018-01-17 04:19