Wie deinstalliere ich einen Windows-Dienst, wenn die Dateien nicht mehr vorhanden sind?

570

Wie deinstalliere ich einen .NET Windows-Dienst, wenn die Dienstdateien nicht mehr vorhanden sind?

Ich habe einen .NET Windows-Dienst mit InstallUtil installiert. Ich habe die Dateien inzwischen gelöscht, aber vergessen, sie auszuführen

 InstallUtil /u

zuerst. Der Dienst ist also weiterhin in der Dienste-MMC aufgeführt.

Muss ich in die Registrierung gehen? Oder gibt es einen besseren Weg?

Thomas Jespersen
quelle
3
Delserv
Tom Kidd
2
Haben Sie den Dienst auch zuerst beendet? (-> net stop yourervice)
Jos
Ein sehr eng verwandter Thread hier .
RBT
Diese Seite hilft mir und ich hoffe, wird Ihnen bei diesem Problem helfen howtogeek.com/howto/windows-vista/…
Ahmed Elbendary

Antworten:

1130

Sie haben mindestens drei Möglichkeiten. Ich habe sie in der Reihenfolge ihrer bevorzugten Nutzung präsentiert.

Methode 1 - Sie können das im Resource Kit enthaltene SC-Tool (Sc.exe) verwenden. (im Lieferumfang von Windows 7/8 enthalten)

Öffnen Sie eine Eingabeaufforderung und geben Sie ein

sc delete <service-name>

Das Tool-Hilfe-Snippet folgt:

DESCRIPTION:
        SC is a command line program used for communicating with the
        NT Service Controller and services.

delete----------Deletes a service (from the registry).

Methode 2 - Verwenden Sie Delserv

Laden Sie das Befehlszeilenprogramm delserv herunter und verwenden Sie es. Dies ist ein Legacy-Tool, das für Windows 2000 entwickelt wurde. In aktuellen Windows XP-Boxen wurde dies durch das in Methode 1 beschriebene sc ersetzt.

Methode 3 - Registrierungseinträge manuell löschen (Beachten Sie, dass dies in Windows 7/8 fehlschlägt)

Windows-Dienste werden unter dem folgenden Registrierungsschlüssel registriert.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

Suchen Sie nach dem Unterschlüssel mit dem Dienstnamen unter dem angegebenen Schlüssel und löschen Sie ihn. (und Sie müssen möglicherweise neu starten, um den Dienst vollständig aus der Diensteliste zu entfernen.)

Jorge Ferreira
quelle
23
Methode 3 scheint unter Windows 7 nach hinten
loszugehen
29
Bei Methode 1 tritt möglicherweise der Fehler "Der angegebene Dienst existiert nicht als installierter Dienst" auf, obwohl der Dienst auf der MMC angezeigt wird !!! Dies liegt daran, dass der angezeigte Name der Anzeigename ist. Sie können den tatsächlichen Dienstnamen unter HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services nachschlagen und diesen als Dienstnamen übergeben.
Denispyr
9
Methode 3 schlug auch für mich unter Windows 7 <Failed to Read Description. Error Code: 2>
fehl
27
Beachten Sie, dass Sie vorsichtig sind, wenn Sie Powershell mit sc verwenden - es überschreibt die Anwendung mit dem Cmdlet set-content und wenn Sie sc delete
ausführen,
10
HINWEIS: Sie müssen Ihren Computer nach Methode 3 neu starten! Schauen Sie sich dann die Liste der Dienste an. es ist wahrscheinlich jetzt weg. Wenn es noch in der Liste enthalten ist, führen Sie einfach Methode 1 aus, um es aus dieser Liste zu entfernen.
Östlich von Nirgendwo
170

Verwenden Sie an der Eingabeaufforderung das Windows-Dienstprogramm "sc.exe". Sie werden so etwas ausführen:

sc delete <service-name>
Dean Hill
quelle
21
Wenn der Dienstname ein Leerzeichen enthält, setzen Sie ihn in doppelte Anführungszeichen.
Geoffc
2
Warum erhalte ich [SC] OpenService fehlgeschlagen 5: Zugriff verweigert.
Adrian Enriquez
10
@AdrianEnriquez, das Ausführen von cmd.exe als Administrator hat dies für mich behoben.
Foldlettuce
3
In Windows 8 wird der Dienst nach Verwendung des Befehls mit deaktiviertem Status in der MMC-Liste angezeigt. Durch einen Neustart wird der Dienst aus der Liste entfernt.
Ryan
Gibt es eine Möglichkeit, die Privilegien dafür zu erhöhen? Ich erhalte immer noch "Zugriff verweigert", nachdem ich den obigen Befehl
Nick
27

Hinweise zur Verwendung von "sc delete" in Windows 8:

1) Öffnen Sie ein CMD-Fenster mit erhöhten Berechtigungen. [Windows Key-X, um ein Menü mit der Option aufzurufen; Wählen Sie "Eingabeaufforderung (Admin)".]
2) Verwenden Sie den Namen in Klammern aus der Liste in Services [Ich habe beispielsweise "sc delete gupdate" verwendet, wenn in Services "Google Update (gupdate)" angezeigt wurde.]

Michael
quelle
21

Einige Leute erwähnen sc deleteals Antwort. So habe ich es gemacht, aber es hat eine Weile gedauert, bis ich den <service-name>Parameter gefunden habe.

Der Befehl sc query type= service(beachten Sie, dass dies bei der Formatierung sehr wichtig ist und der Platz vor "Dienst" erforderlich ist) gibt eine Liste der installierten Windows-Dienste mit ihrem qualifizierten Namen für die Verwendung mit dem sc delete <service-name>Befehl aus.

Die Liste ist ziemlich lang, daher können Sie die Ausgabe an eine Textdatei (dh >> C:\test.txt) weiterleiten und diese dann durchsuchen.

Das SERVICE_NAMEist dasjenige, das mit sc delete <service-name>Befehl verwendet werden soll.

Robin French
quelle
2
Siehe meinen Kommentar zur akzeptierten Antwort. Der Dienstname kann schnell ermittelt werden, indem Sie im Eigenschaftenfenster im Eigenschaftenfenster auf das Eigenschaftenblatt für den Dienst schauen.
Donperk
2
Das war völlig unnötig: Wenn sie in der Serviceliste angezeigt werden, können Sie einfach die Eigenschaften der Services, die Sie aus der Serviceliste entfernen möchten, in der Serviceliste öffnen und den Servicenamen anzeigen. Der in den dortigen Eigenschaften aufgeführte "Dienstname" hat ebenfalls den gleichen Dienstnamen. :)
Neminem
2
Ja, ich weiß, dass Sie den Namen auf andere Weise erreichen können. Ich habe dies hinzugefügt, weil ich Probleme hatte, herauszufinden, welche der Namen im Befehl verwendet werden sollten. Ich hatte den in den Serviceeigenschaften aufgeführten Namen gesehen, wusste aber zu diesem Zeitpunkt noch nicht, welcher Name im Befehl verwendet werden sollte. Die Verwendung der Befehlszeile war für mich eine gute Möglichkeit, alle installierten Dienste zu löschen, einschließlich des <Dienstnamens>, der zum Entfernen verwendet werden soll. Ich hatte einige Dienste, die dies benötigten, so dass es für mich einfacher war, die gesamte Liste in eine Datei zu kopieren, damit ich sie erreichen konnte, ohne sie im Dienst-Snap-In nachschlagen zu müssen.
Robin French
Sie können einfach so ausführen, sc querywie es standardmäßig ist type= service.
Ian Kemp
11

Entfernen Sie den Windows-Dienst über die Registrierung

Es ist sehr einfach, einen Dienst aus der Registrierung zu entfernen, wenn Sie den richtigen Pfad kennen. So habe ich das gemacht:

  1. Führen Sie Regedit oder Regedt32 aus

  2. Gehen Sie zum Registrierungseintrag "HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services".

  3. Suchen Sie nach dem Dienst, den Sie löschen möchten, und löschen Sie ihn. Sie können sich die Schlüssel ansehen, um zu erfahren, welche Dateien der Dienst verwendet hat, und sie auch löschen (falls erforderlich).

Löschen Sie den Windows-Dienst über das Befehlsfenster

Alternativ können Sie auch die Eingabeaufforderung verwenden und einen Dienst mit dem folgenden Befehl löschen:

sc löschen

Sie können einen Dienst auch mit dem folgenden Befehl erstellen

sc create "MorganTechService" binpath = "C: \ Programme \ MorganTechSPace \ myservice.exe"

Hinweis: Möglicherweise müssen Sie das System neu starten, um die Liste im Service Manager zu aktualisieren.

kombsh
quelle
9

Wenn Sie ein Tool dafür verwenden möchten, können Sie Process Hacker verwenden

Formular zum Erstellen des Dienstes:

Prozess Hacker Create Service

Kontextmenü eines Dienstes zum Löschen:

Prozess Hacker Delete Service

Ich finde Process Hacker ein praktischeres Tool zum Verwalten von Windows-Prozessen und -Diensten als Windows-eigene Taskmgr.exe. Insbesondere unter Windows XP, wo Sie über den Task-Manager überhaupt nicht auf Dienste zugreifen können.

Mike de Klerk
quelle
4

Ich musste meinen Tomcat-Dienst neu installieren, was bedeutete, dass ich ihn zuerst entfernen musste. Das hat bei mir funktioniert:

Start a command prompt window using run as administrator

sc query type= service >t.txt

(Bearbeiten Sie die Datei t.txt, durchsuchen Sie die Liste und suchen Sie den Tomcat-Dienst. Er heißt Tomcat7.)

sc delete Tomcat7

Der Abfragebefehl funktionierte jedoch nicht beim ersten Mal, da der Tomcat-Dienst nicht ausgeführt wurde. Es scheint nur Dienste aufzulisten, die ausgeführt werden. Ich musste den Dienst starten und den Abfragebefehl erneut ausführen.

user1208639
quelle
Wenn Sie gestoppte Dienste anzeigen möchten, verwenden Sie den stateParameter.
Harry Johnston
3

Wenn sich die ursprünglichen Service .InstallLog- und .InstallState-Dateien noch im Ordner befinden, können Sie versuchen, die ausführbare Datei neu zu installieren, um die Dateien zu ersetzen. Verwenden Sie dann InstallUtil / u und deinstallieren Sie das Programm. Es ist ein bisschen verworren, hat aber in einem bestimmten Fall für mich funktioniert.

ja928
quelle
3

Sie können versuchen, Autoruns auszuführen , sodass Sie die Registrierung nicht manuell bearbeiten müssen. Dies ist besonders nützlich, wenn Sie nicht über die erforderlichen Berechtigungen verfügen.

Bräunen
quelle
0

1. Schritt: Wechseln Sie in das Verzeichnis, in dem Ihr Dienst vorhanden ist

Befehl: cd c: \ xxx \ yyy \ service

2. Schritt: Geben Sie den folgenden Befehl ein

Befehl: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe service.exe \ u

Hier ist service.exe Ihre Service-Exe und Sie werden den Service deinstallieren. Sie sehen die Meldung "Die Deinstallation ist abgeschlossen".

Wenn Sie einen Dienst installieren möchten, entfernen Sie \ u im obigen Befehl, um Ihren Dienst zu installieren

Sree
quelle
3
Das OP hat klar gesagt, dass die Originaldateien gelöscht wurden.
Nach
0

Wir haben festgestellt, dass selbst bei Ihrer Ausführung sc_deletemöglicherweise noch ein Eintrag in der Registrierung für Ihren Dienst vorhanden ist, sodass die Neuinstallation des Dienstes zu einer beschädigten Reihe von Registrierungseinträgen führt (diese stimmen nicht überein). Wir haben regeditdiesen übrig gebliebenen Eintrag von Hand entfernt.

Hinweis: ShipmunkService wird nach sc_delete immer noch angezeigt!

Dann können Sie neu installieren und Ihr Dienst wird korrekt ausgeführt. Ich wünsche Ihnen allen viel Glück und möge die Macht mit Ihnen sein.

Barclay
quelle
0

Sie können Ihren Windows-Dienst über die Eingabeaufforderung deinstallieren. Schreiben Sie auch einfach diesen Befehl

cd\                                                                   

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319(or version in which you developed your service)                                           

installutil c:\\xxx.exe(physical path of your service) -d
Amarjit Singh Chaudhary
quelle
0

-Windows+r Öffnen Sie cmd.

-sc YourSeviceName Dieser Code entfernt Ihren Dienst.

-Uninstal "YourService Path" Dieser Code deinstalliert Ihren Dienst.

Ayse Özbek
quelle