Wie deinstalliere ich einen Windows-Dienst, wenn auf dem System keine ausführbare Datei mehr vorhanden ist?

166

Wie deinstalliere ich einen Windows-Dienst, wenn auf dem System keine ausführbare Datei mehr vorhanden ist? Ich kann nicht ausgeführt werden, installutil -uda auf dem System keine ausführbare Datei mehr vorhanden ist. Ich kann immer noch einen Eintrag für den Dienst in der Dienstekonsole sehen.

Der Grund für diesen Status liegt wahrscheinlich in einem Problem im msi-Paket, das den Dienst nicht korrekt entfernt. Wie kann ich ihn jedoch beheben, wenn sich der Dienst in diesem Status befindet?

Magnus Lindhe
quelle

Antworten:

325

Sie sollten in der Lage sein, es mit sc.exe zu deinstallieren (ich glaube, es ist im Windows Resource Kit enthalten), indem Sie an einer Eingabeaufforderung "Administrator" Folgendes ausführen:

sc.exe delete <service name>

Wo <service name>ist der Name des Dienstes selbst, wie Sie ihn in der Dienstverwaltungskonsole sehen, nicht der Exe?

Sie finden sc.exe im Ordner System und es benötigt Administratorrechte, um ausgeführt zu werden. Weitere Informationen finden Sie in diesem Microsoft KB-Artikel .

Alternativ können Sie die API DeleteService () direkt aufrufen . Dieser Weg ist etwas komplexer, da Sie über OpenSCManager () usw. einen Handle an den Service Control Manager senden müssen , andererseits aber mehr Kontrolle darüber haben, was passiert.

Treb
quelle
Es hat genau das getan, was ich wollte und den Dienst aus der Registrierung entfernt. Es wird nicht mehr in der Dienstekonsole angezeigt. Vielen Dank!
Magnus Lindhe
Ich erhalte die Meldung "Zugriff verweigert". Was macht man als nächstes?
Nick
4
Nur ein Hinweis für alle, die versuchen, einen Befehl in Methode 1 in PowerShell: sc auszuführen, nicht für die Kommunikation mit dem Service Control Manager. Es ist der Befehl Set-Content. Verwenden Sie stattdessen sc.exe.
Yasser Sinjab
1
Wenn Sie Fehler 1072 erhalten, stellen Sie sicher, dass Sie das Service Control Panel nicht geöffnet haben (siehe diese andere Frage )
Giles
Ich habe den folgenden Fehler erhalten. [SC] OpenService FAILED 1060: Der angegebene Dienst ist nicht als installierter Dienst vorhanden. Später versuchte das gleiche mit Power Shell und es funktioniert!
Crazydan
24

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 den 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
3
Ist die Registrierung so sicher? Ist das "Endergebnis" der Registrierung das gleiche wie das "Endergebnis" von sc delete?
Pacerier
5
Nein, ich habe gerade versucht, einen Dienst direkt aus regedit zu löschen. Infolgedessen bleibt der Eintrag des Dienstes, den ich löschen wollte, im Dienst, während in der Beschreibung Folgendes angezeigt wird: "<Beschreibung konnte nicht gelesen werden. Fehlercode: 2>"
GJ.
11

hier gefunden

Ich habe gerade Windows XP ausprobiert, es hat funktioniert

lokaler Computer: sc \\. lösche [Dienstname]

  Deleting services in Windows Server 2003

  We can use sc.exe in the Windows Server 2003 to control services, create services and delete services. Since some people thought they must directly modify the registry to delete a service, I would like to share how to use sc.exe to delete a service without directly modifying the registry so that decreased the possibility for system failures.

  To delete a service: 

  Click “start“ - “run“, and then enter “cmd“ to open Microsoft Command Console.

  Enter command:

  sc servername delete servicename

  For instance, sc \\dc delete myservice

  (Note: In this example, dc is my Domain Controller Server name, which is not the local machine, myservice is the name of the service I want to delete on the DC server.)

  Below is the official help of all sc functions:

  DESCRIPTION:
    SC is a command line program used for communicating with the
    NT Service Controller and services. 
  USAGE:
          sc
Fredou
quelle
10

Hier ist das Powershell-Skript zum Löschen eines Dienstes foo

$foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'"
$foo.delete()
Nima Soroush
quelle
9

Am liebsten verwende ich dazu die Anwendung Sysinternals Autoruns . Wählen Sie einfach den Dienst aus und drücken Sie Löschen.

Thomas Bratt
quelle
Warum nicht einfach benutzen sc delete?
Pacerier
3

Erstellen Sie eine Kopie der ausführbaren Dateien desselben Dienstes, fügen Sie sie in denselben Pfad des vorhandenen Dienstes ein und deinstallieren Sie sie anschließend.

Samiksha
quelle
Das ist ein guter Vorschlag. Wenn das nicht funktioniert, muss er möglicherweise neu installieren, installutil -u ausführen und dann deinstallieren
wcm
Müssen wir die Kopie derselben Exe erstellen oder würde das Umbenennen einer anderen Datei gut funktionieren?
Imran Rizvi
@ Samiksha, ich dachte, er sagte, er hätte keine " Kopie der ausführbaren Dateien "?
Pacerier