Ich versuche, einen Windows-Dienst mit zu entfernen sc delete <service name>
, und stelle den folgenden Fehler fest:
[SC] DeleteService FAILED 1072:
Der angegebene Dienst wurde zum Löschen markiert.
Was ich schon gemacht habe:
Offensichtlich wurde der Dienst eingestellt. Das
sc queryex "<service name>"
ergibt folgendes Ergebnis: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 :
Stellen Sie sicher, dass die Microsoft Management Console geschlossen ist (
taskkill /F /IM mmc.exe
).Stellen Sie sicher, dass die Ereignisanzeige geschlossen ist.
-
Aufgrund dieser Entfernung wird
services.msc
der Dienst weiterhin angezeigt (mit einem Namen, aber ohne Status oder Starttyp), aber die Beschreibung lautet „<Beschreibung konnte nicht gelesen werden. Fehlercode: 2> ”. Beim Versuch, die Eigenschaften anzuzeigen, wird "Das System kann die angegebene Datei nicht finden." wird fünfmal gezeigt.
Das Problem besteht weiterhin.
Was ist der nächste Schritt?
quelle
Antworten:
Es kann verschiedene Ursachen geben, die dazu führen, dass der Dienst in "Zum Löschen markiert" steckt.
Der Prozess-Explorer von SysInternals wird geöffnet . Das Schließen sollte zum automatischen Entfernen des Dienstes führen.
Der Task-Manager wird geöffnet .
Microsoft Management Console (MMC) wird geöffnet . Führen Sie aus, um sicherzustellen, dass alle Instanzen geschlossen sind
taskkill /F /IM mmc.exe
.Die Dienstekonsole wird geöffnet . Dies ist derselbe wie im vorherigen Punkt, da die Services-Konsole von MMC gehostet wird.
Die Ereignisanzeige wird geöffnet . Dies ist wiederum der gleiche wie der dritte Punkt.
Der Schlüssel HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ {Dienstname} ist vorhanden .
Jemand anderes ist am Server angemeldet und hat eine der zuvor genannten Anwendungen geöffnet.
Eine zum Debuggen des Dienstes verwendete Instanz von Visual Studio ist geöffnet.
quelle
Dies kann auch dadurch verursacht werden, dass die Services-Konsole geöffnet bleibt. Windows löscht den Dienst erst, wenn er geschlossen ist.
quelle
Ich hatte das gleiche Problem, schließlich entscheide ich mich, den Serviceprozess zu beenden.
Versuchen Sie dazu die folgenden Schritte:
Prozess-ID des Dienstes mit abrufen
sc queryex <service name>
Kill-Prozess mit
taskkill /F /PID <Service PID>
quelle
In meinem Fall hat es nach dem Schließen der funktioniert
Services
. Überprüfen Sie, ob dasServices.msc
geöffnet ist, wenn ja, schließen Sie es und überprüfen Sie, ob ein Serviceprozess in gefunden wurdeTask Manager
.quelle
Das bedeutet, dass der Dienst in services.msc weiterhin als deaktiviert aufgeführt ist. Schließen Sie einfach die Datei services.msc und öffnen Sie sie erneut als Administrator ... Der Dienst wird nicht aufgelistet. Installieren Sie nun den Dienst mit dem Befehl:
installutil "Pfad des Dienstes"
quelle
Durch das Löschen von Registrierungsschlüsseln wie oben vorgeschlagen blieb mein Dienst im Stoppzustand hängen. Das folgende Verfahren hat bei mir funktioniert:
Öffnen Sie den Task-Manager> wählen Sie die Registerkarte Dienste> wählen Sie den Dienst aus> klicken Sie mit der rechten Maustaste und wählen Sie "Zum Prozess gehen"> klicken Sie mit der rechten Maustaste auf den Prozess und wählen Sie Prozess beenden
Der Service sollte danach weg sein
quelle
Sie haben eine weitere Sache entdeckt, die Sie überprüfen müssen - schauen Sie im Task-Manager nach -, ob andere Benutzer mit diesem Feld verbunden sind, auch wenn sie nicht verbunden sind. Sie müssen sie tatsächlich abmelden, damit der Dienst endgültig gelöscht wird.
quelle
Es scheint, dass unter Windows-Versionen später als Windows 7 (nicht überprüft, aber aufgrund der neuesten Erfahrungen mit Windows Server 2012 R2) der Service Control Manager (SCM) strenger ist.
Während unter Windows 7 nur ein anderer Prozess erzeugt wird, wird jetzt geprüft, ob der Dienstprozess noch vorhanden ist, und möglicherweise ERROR_SERVICE_MARKED_FOR_DELETE (1072) für jeden nachfolgenden Aufruf von CreateService / DeleteService zurückgegeben, selbst wenn der Dienst anscheinend gestoppt wird.
Ich spreche hier von Windows-API-Code, möchte aber klar umreißen, was passiert, sodass diese Sequenz zu dem genannten Fehler führen kann:
Der Grund, warum ein Serviceprozess noch besteht, nachdem er bereits seinen Status SERVICE_STOPPED gemeldet hat, ist nicht überraschend. Es handelt sich um einen regulären Prozess, dessen Hauptthread beim Aufruf der
StartServiceCtrlDispatcher
API "hängen bleibt". Er reagiert also zuerst auf eine Aktion zur Steuerung des Stopps, muss dann aber die verbleibende Codesequenz ausführen.Es ist bedauerlich, dass das SCM / OS dies für uns nicht richtig handhabt. Eine programmatische Lösung ist ein bisschen einfach und genau: Rufen Sie das Prozesshandle der ausführbaren Dienstdatei ab, bevor Sie den Dienst beenden, und warten Sie, bis dieses Handle signalisiert wird.
Wenn Sie sich dem Problem aus Sicht der Systemadministration nähern, besteht die Lösung auch darin, darauf zu warten, dass der Serviceprozess vollständig verschwindet.
quelle
Dies hat bei mir funktioniert: - Ich habe das gleiche Problem festgestellt: Mein Dienst steckte in "Zum Löschen markiert" fest. - Ich habe services.msc geöffnet. Mein Dienst wurde als ausgeführt angezeigt, obwohl er bereits deinstalliert war. - Ich habe auf Stop Received eine Fehlermeldung geklickt, die besagt, dass der Dienst nicht in der Lage ist, Kontrollnachrichten zu empfangen. Trotzdem wurde der Dienst eingestellt. - Geschlossene services.msc. - Wiedereröffnete services.msc. - Der Dienst war weg (wird nicht mehr in der Liste der Dienste angezeigt).
(Die Umgebung war Windows 7.)
quelle
In meinem Fall führe ich aus
taskkill /f /im dongleserver.exe
, wodongleserver.exe
sich die exe-Datei meines Programms befindet.Dann kann ich mein Programm bereits neu installieren.
quelle
In meinem Fall wurde dies durch eine nicht behandelte Ausnahme beim Erstellen der eventLog-Quelle verursacht. Verwenden Sie try catch, um die Ursache zu ermitteln.
quelle
Das Schließen jedes aktuell geöffneten Fensters und das Ausführen des folgenden Befehls lösten das Problem für mich:
quelle
Durch das Schließen der Dienstekonsole, wie in einigen der Antworten hier vorgeschlagen, konnte ich den Dienst entfernen. In meinem Szenario war dies nur eine kurzfristige Lösung, da ich bei allen nachfolgenden Neuinstallationen und beim Entfernen des Dienstes diese zusätzlichen Schritte ausführen müsste. Beim Überprüfen meiner Datei web.config wurde festgestellt, dass ein Fehler aufgetreten ist, der es mir nach der Behebung ermöglichte, den Dienst problemlos zu entfernen, ohne den Schritt der Dienstekonsole zusätzlich schließen zu müssen.
quelle
Das funktioniert bei mir.
Prozessbaum beenden beendet den Prozess und alle vom Prozess erstellten Prozesse.
Anschließend können Sie den Dienst neu installieren.
quelle
In meinem Fall war der Dienstname "Monitor", der auch von einem Windows-Dienst namens "Monitor" verwendet wird. Als ich versuchte, meine Dienste zu aktualisieren, habe ich versucht, sie zu deinstallieren. Das Installationsprogramm hat versucht, den Windows-Dienst "Monitor" zu entfernen, den es enthält konnte nicht, und die Installation wurde immer zurückgesetzt.
Am Ende habe ich meinen Dienst in etwas anderes umbenannt
quelle
Wenn die von @MainMa bereitgestellten Schritte nicht funktionierten, befolgen Sie die folgenden Schritte
Schritt 1 Versuchen Sie, den Prozess über den Windows Task-Manager abzubrechen oder Taskkill / F / PID zu verwenden. Sie können die PID des Prozesses mit dem Befehl 'sc queryex' finden. Versuchen Sie den nächsten Schritt, wenn Sie immer noch nicht deinstallieren können.
Schritt 2 Wenn oben
Führen Sie Autoruns for Windows Search nach Dienst nach Namen aus und löschen Sie die Ergebnisse.
quelle
Der Hauptgrund für den Fehler ist, dass der Prozess nicht gestoppt wird. Um das Problem zu beheben, starten Sie den Task-Manager, gehen Sie zu den Diensten und prüfen Sie, ob Sie Ihren Dienst noch sehen können. Gehen Sie dann zum Prozess dieses Dienstes und beenden Sie den Prozess. Dann wird das Problem vollständig gelöst.
quelle
Ich hatte dieses Problem, als ich Application Verifier verwendete, um meinen Win-Service zu überprüfen. Selbst nachdem ich App Ver geschlossen hatte, wurde mein Dienst für das Löschen gesperrt. Nur das Entfernen des Dienstes aus App Ver hat das Problem behoben und der Dienst wurde sofort gelöscht. Es sieht so aus, als ob ein Prozess Ihren Dienst noch verwendet, nachdem Sie versucht haben, einen zu löschen.
quelle
Schritte zum folgen:
Schritt 1 gehen Sie zum Speicherort C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319
Schritt-2- Befehl ausführen: installutil / u full-path / servicename.exe
Schritt 3 Schließen Sie das Service-Panel und öffnen Sie es erneut
Schritt-4- Befehl ausführen: installutil full-path / servicename.exe
quelle
Das Löschen des Dienstes schlägt höchstwahrscheinlich fehl, weil
Fehler beim Beenden eines Dienstes auslösen. Das Umschließen von Dingen in einen Try-Catch verhindert das Markieren eines Löschfehlers
}}
quelle
Manchmal kann dies beim Löschen von Diensten über das PowerShell-Remotesitzungsskript passieren, insbesondere wenn Sie mehrmals versuchen, Dienste zu löschen. Versuchen Sie in diesem Fall, eine Sitzung vor dem Löschen neu zu erstellen:
quelle