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.

DotnetSparrow
quelle
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.

DrPppr242
quelle
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
27

Sie können dies in einer Zeile tun (nützlich für ci-Umgebungen):

taskkill /fi "Services eq SERVICE_NAME" /F

Filter -> Dienste -> Dienstname entspricht SERVICE_NAMES -> Erzwingen

Quelle: https://technet.microsoft.com/en-us/library/bb491009.aspx

totev
quelle
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.

Aaron Klotz
quelle
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.

Varun Rathore
quelle
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!

Vortal
quelle
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
2
sc queryex <service name>
taskkill /F /PID <Service PID>

z.B

Geben Sie hier die Bildbeschreibung ein

z.B

abdul rehman kk
quelle
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.

Mohan D Kishore
quelle
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).

Janugi Rama
quelle
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