Comment résoudre l’erreur “Le service spécifié a été marqué pour suppression”

J’essaie de supprimer un service Windows avec sc delete 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:

  • Arrêté le service, évidemment. Le sc queryex "" donne le résultat suivant:

     SERVICE_NAME: Stub service TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 1067 (0x42b) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 PID : 0 FLAGS : 
  • Assuré que Microsoft Management Console est fermé ( taskkill /F /IM mmc.exe ),

  • Assuré que l’Observateur d’événements est fermé ,

  • Suppression de la clé HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ du registre .

    En raison de cette suppression, services.msc affiche toujours le service (avec un nom, mais aucun état ni type de démarrage), mais la description est « “. Lors de la tentative d’affichage des propriétés, «le système ne peut pas trouver le fichier spécifié» s’affiche cinq fois.

Le problème persiste.

Quelle est la prochaine étape?

Plusieurs causes peuvent entraîner le blocage du service «marqué pour suppression».

  1. SysInternals ‘Process Explorer 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 . 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 du service} existe .

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

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

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

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

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 de service du service avec

    sc queryex

  • tuer le processus avec

    taskkill /F /PID

La suppression des clés de registre comme suggéré ci-dessus a permis à mon service de restr 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

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 les déconnecter pour que le service soit définitivement supprimé.

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, bien qu’il ait 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éouverts.msc. – Le service a disparu (ne figure plus dans la liste des services).

(L’environnement était Windows 7.)

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

installutil “chemin de service”

Il semble que sur les versions de Windows ultérieures à Windows 7 (non vérifiées, mais plus récentes avec Windows Server 2012 R2), le Service Control Manager (SCM) est plus ssortingct.

Sous Windows 7, il ne fait que générer un autre processus, il vérifie maintenant si le processus de service est toujours présent 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 à 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 surprenant. C’est un processus normal, 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, mais doit ensuite exécuter la séquence de code restante.

C’est dommage que le SCM / OS ne le traite pas 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 handle soit signalé.

Si l’on aborde le problème du sharepoint vue de l’administration du système, la solution consiste également à attendre que le processus de service disparaisse complètement.

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 identifier la cause.

Dans mon cas, taskkill /f /im dongleserver.exe , où dongleserver.exe est le fichier exe de mon programme.

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

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 

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

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

Étape 2 Si ci-dessus

Exécutez Autoruns pour Windows Recherchez le service par nom et supprimez les résultats.

La principale raison de l’erreur est que le processus n’est pas arrêté. pour le résoudre, lancez le gestionnaire de tâches dans les services et vérifiez si vous êtes toujours en mesure de voir votre service plutôt que d’aller au processus de ce service et de terminer le processus. Que le problème sera résolu complètement.

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

étapes à suivre:

étape-1 aller à l’emplacement C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

étape 2: exécuter la commande: installutil / u full-path / servicename.exe

étape 3 fermer le panneau des services et le rouvrir

Étape 4: exécutez la commande: installutil full-path / servicename.exe