Beenden eines Windows-Dienstes, wenn die Stoppoption abgeblendet ist


79

Ich habe einen Windows-Dienst erstellt und im Dienst in der Systemsteuerung -> Verwaltungstools -> Dienste wird dessen Status gestartet.

Ich möchte diesen Dienst beenden, aber die Stoppoption ist ausgegraut. Wie kann ich den Dienst starten / stoppen?

Jedes Mal, wenn ich neu starte, wird es gestoppt und ich kann es löschen.


Was möchten Sie erreichen? Sie möchten es stoppen oder löschen?
Anirudh Ramanathan

Löschen Sie es, aber Stopp ist vor dem Löschen. Derzeit beginnt der Status.
DotnetSparrow

Haben Sie versucht, die Exe, die den Dienst ausführt, mit dem Task-Manager zu beenden?
Chris J

1
@ Chris: Ich sehe sie nicht unter Task-Manager aufgelistet. Vielleicht, weil der Service noch nicht gestartet wurde?
DotnetSparrow

Antworten:


147

Wenn Sie den Befehl ausführen:

sc queryex <service name>

Wo ist der Name des Dienstes, nicht der Anzeigename (Spooler, nicht Print Spooler)? An der cmd-Eingabeaufforderung wird die PID des Prozesses zurückgegeben, unter dem der Dienst ausgeführt wird. Nehmen Sie diese PID und laufen Sie

taskkill /F /PID <Service PID>

um die PID zum Stoppen zu zwingen. Wenn der Prozess beim Stoppen der GUI hängen bleibt, können Sie manchmal nichts mit dem Dienst tun.


2
Windows 2000 unterstützt nicht. sc ..Daher habe ich den Prozess in den Eigenschaften dieses Dienstes gefunden Path to executableund in taskmgr beendet.
AD

@ DrPppr242, Sind Sie sicher, dass dies eine sichere Option ist?
Pacerier

3
Die einzige Möglichkeit, dies zum Laufen zu bringen, bestand darin, die Eingabeaufforderung als Administrator auszuführen.
Hurleystylee

2
Es funktioniert nicht für den verdammten Baidu Hips Service. Sogar wenn Sie cmd als Administrator ausführen. Manchmal fühle ich mich nicht der Besitzer meines eigenen Computers mit diesem beschissenen Betriebssystem ...
Paulo Carvalho

1
Ich habe versucht, CMD als Administrator auszuführen. Ich erhalte die folgende Fehlermeldung: Der Vorgang kann mit PID XXXX nicht gestoppt werden. Grund: Zugriff verweigert.
Floppy88


8

Wenn die Stoppoption ausgegraut ist, hat Ihr Dienst nicht angegeben, dass er SERVICE_ACCEPT_STOPbeim letzten Aufruf akzeptiert hat SetServiceStatus. Wenn Sie .NET verwenden, müssen Sie die CanStopEigenschaft in festlegen ServiceBase.

Wenn Sie Stoppanfragen akzeptieren, sollten Sie natürlich sicherstellen, dass Ihr Dienst diese Anforderungen sicher verarbeiten kann, insbesondere wenn Ihr Dienst noch seinen Startcode durchläuft.


7

Verwenden Sie den Task-Manager, um den Dienst zu finden und von dort aus mit End Task zu beenden. Macht immer den Trick für mich.

Wenn Sie den Dienst selbst erstellt haben, sollten Sie in Betracht ziehen, lang laufende Vorgänge aus dem OnStart-Ereignis zu entfernen. Dies führt normalerweise dazu, dass der Dienst nicht reagiert.


1
END TASK vom Task-Manager stoppt nicht Dienste, die als "NOT_STOPPABLE" konfiguriert sind, wie Windows Defender oder einige andere Sicherheitsdienste von Drittanbietern. Sie erhalten nur die Meldung "Zugriff verweigert".
Arana

5

Wie Aaron oben erwähnt hat, akzeptieren einige Dienste SERVICE_ACCEPT_STOPzum Zeitpunkt der Entwicklung keine Nachrichten. Und das ist fest in der ausführbaren Datei codiert. Zeitraum. Eine Workaroud wäre, sie nicht zu starten, und da Sie ihre Eigenschaften nicht ändern können, gehen Sie wie folgt vor:

  1. Booten Sie im abgesicherten Modus (Windows 10-Benutzer benötigen möglicherweise msconfig> boot> sicherer Start).
  2. Regedit in HKLM> System> ControlSet001> Services
  3. Suchen Sie Ihren Serviceeintrag
  4. Ändern Sie die Starttaste in 3 (manueller Start) oder 4 (deaktiviert).

Wenn Sie den Eintrag nicht ändern können, klicken Sie im linken Bereich mit der rechten Maustaste auf Ihren Dienstnamen, wählen Sie "Berechtigungen", überprüfen Sie, ob "Jeder" vollen Zugriff hat, und wiederholen Sie Schritt 4.

Vergessen Sie nicht, den sicheren Start von msconfig erneut zu deaktivieren und neu zu starten!


1
Gute Antwort. Es hat funktioniert, weil der Dienst mich es nicht löschen ließ, selbst mit der PID. Nachdem ich den Startschlüsselwert bearbeitet und neu gestartet hatte, konnte ich den Dienst löschen. Vielen Dank.
Duque


1

Öffnen Sie die Eingabeaufforderung mit Administratorzugriff und geben Sie dort die folgenden Befehle ein.

ein)

tasklist

Es zeigt eine Liste aller verfügbaren Dienste an. Dort sehen Sie den Dienst, den Sie stoppen / starten / neu starten möchten. Merken Sie sich den PID-Wert des Dienstes, den Sie erzwingen möchten.

b) Geben Sie nun ein

taskkill /f /PID [PID value of the service] 

und drücken Sie die Eingabetaste. Bei Erfolg erhalten Sie die Meldung "ERFOLG: Der Prozess mit PID wurde beendet".

Ex : taskkill /f /PID 5088

Dadurch wird der eingefrorene Dienst gewaltsam beendet. Sie können jetzt zum Server-Manager zurückkehren und den Dienst neu starten.


0

Ich habe das Problem mit den folgenden Schritten gelöst:

  1. Öffnen Sie "services.msc" über den Befehl / Windows RUN.

  2. Finden Sie den Dienst (der ausgegraut ist).

  3. Doppelklicken Sie auf diesen Dienst und wechseln Sie zur Registerkarte "Wiederherstellung".

  4. Sicher gehen, dass

    • Die erste Fehleraktion ist als "Keine Aktion ausführen" ausgewählt.
    • Die zweite Fehleraktion ist als "Keine Aktion ausführen" ausgewählt.
    • Die Aktion "Nachfolgende Fehler" ist als "Keine Aktion ausführen" ausgewählt.

    und drücken Sie OK.

Jetzt versucht der Dienst nicht mehr neu zu starten, und Sie können den ausgegrauten Dienst aus der Diensteliste löschen (dh ausgegraut wird nicht mehr angezeigt).


Das klingt nach einem guten Punkt, aber alle Optionen, die Sie in meinem Win10 vorschlagen, sind ausgegraut. Ich stecke fest. Jedes Mal, wenn ich den Prozess stoppe (CyOptics), wird er erneut gestartet ... und es verbraucht> 40% meiner CPU :-( Ich habe alle Versuche mit Administratorzugriff durchgeführt
Uhr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.