680 votes

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

Je tente de supprimer un service Windows avec sc delete , et je 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?

5 votes

Un redémarrage devrait normalement résoudre tout état persistant.

23 votes

Je sais. Mais j'ai envisagé une solution moins radicale. Redémarrer trente fois par jour ne sera pas une solution acceptable dans mon cas.

1 votes

Pourtant, pirater dans le registre 30 fois par jour est acceptable ? Et pourquoi supprimez-vous des services aussi régulièrement ?

16voto

Amey P Naik Points 318

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

installutil "chemin du service"

1 votes

Solution la plus simple jamais :)

1 votes

Je viens de devoir rouvrir mes services.msc et il a disparu. merci!

11voto

mathart63 Points 111

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

ouvrir le gestionnaire des tâches > sélectionner l'onglet "Services" > sélectionner le service > clic droit et sélectionner "Aller au processus" > clic droit sur le processus et sélectionner Terminer le processus

Le service devrait disparaître après cela

9voto

Kathy Gryta Points 109

Découvert une autre 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 effectivement les déconnecter pour que le service soit finalement supprimé.

4 votes

Inutile. Vous devez simplement vous assurer que tout le monde quitte la Console de gestion Microsoft (MMC) et le panneau de contrôle des Services.

6voto

Tshilidzi Mudau Points 103

Fermer chaque fenêtre actuellement ouverte, puis exécuter la commande suivante a résolu le problème pour moi :

taskkill /F /IM mmc.exe

6voto

klaus triendl Points 348

Il semble qu'à partir des versions de Windows postérieures à Windows 7 (non vérifié, mais d'après mon expérience la dernière est Windows Server 2012 R2), le Gestionnaire de contrôle des services (SCM) est plus strict.

Alors que sur Windows 7 il se contentait de lancer un autre processus, il vérifie maintenant si le processus du service est toujours présent et peut renvoyer l'erreur ERROR_SERVICE_MARKED_FOR_DELETE (1072) pour toute appel ultérieur à CreateService/DeleteService même si le service semble être arrêté.

Je parle ici de code de l'API Windows, mais je tiens à expliciter clairement ce qui se passe, donc cette séquence peut entraîner l'erreur mentionnée :

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

SC_HANDLE hSvc = OpenService(hScm, L"Service fictif", SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE);

SERVICE_STATUS ss;
ControlService(hSvc, SERVICE_CONTROL_STOP, &ss);
// ... attendre que le service signale son état SERVICE_STOPPED

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

// toutes les appels ultérieurs à CreateService/DeleteService échoueront
// si le processus du service est toujours actif

La raison pour laquelle un processus de service est toujours actif après avoir 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 d'abord à une action de contrôle d'arrêt, puis doit exécuter sa séquence de code restante.

Il est un peu dommage que le SCM/Système d'exploitation ne gère pas correctement cela pour nous. Une solution programmable est plutôt simple et précise : obtenir le handle du processus exécutable du service avant d'arrêter le service, puis attendre que ce handle soit signalé.

Si l'on aborde le problème d'un point de vue administratif système, la solution est également d'attendre que le processus du service disparaisse complètement.

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