it-swarm.com.de

So erzwingen Sie die Deinstallation des Windows-Dienstes

Ich habe einen Windows-Dienst mit installUtil.exe installiert. 

Nach der Aktualisierung des Codes habe ich installUtil.exe erneut verwendet, um den Dienst zu installieren, ohne die Originalversion zu deinstallieren.

Wenn ich jetzt versuche, den Dienst zu deinstallieren, wird die Deinstallation von installUtil.exe erfolgreich abgeschlossen. Der Dienst wird jedoch weiterhin angezeigt. 

Wenn ich versuche, seine Eigenschaften zu ändern, erhalte ich die Nachricht "Dienst ist zum Löschen markiert". 

Wie kann ich die Löschung erzwingen (vorzugsweise ohne Neustart des Servers)?

155
Manu

Eine Sache, die mich in der Vergangenheit erwischt hat, ist, dass wenn der Dienste-Viewer ausgeführt wird, dies verhindert, dass die Dienste vollständig gelöscht werden 

423
the_mandrill

Sie müssen Ihren Computer nicht neu starten. Starten Sie cmd oder PowerShell im erhöhten Modus.

sc.exe queryex <SERVICE_NAME>

Dann bekommst du ein paar Infos. Eine PID-Nummer wird angezeigt.

taskkill /pid <SERVICE_PID> /f

Wo/f ist halt zu erzwingen.

Jetzt können Sie Ihren Dienst installieren oder starten.

131
johan

nun, Sie können SC.EXE verwenden, um jeden Windows-Dienst zwangsweise zu löschen, wenn die Deinstallation nicht zufällig entfernt wird.

sc delete <Service_Name>

Lesen Sie mehr über "MS Techno-Blogging" Dienste mit Gewalt aus Diensten löschen MMC

81
user186749

Ich weiß, dass dies nicht helfen wird, aber es könnte in Zukunft jemandem helfen.

Ich hatte gerade das gleiche Problem. Beim Schließen und erneuten Öffnen des Services-Managers wurden sowohl der Eintrag aus der Registrierung entfernt als auch die Deinstallation des Services abgeschlossen.

Zuvor hatte es nicht geholfen, den Servicemanager zu aktualisieren.

36
Kennifer
sc delete sericeName

Stellen Sie nur sicher, dass der Dienst gestoppt ist, bevor Sie dies tun. Ich habe diese Arbeit meistens gesehen. Es gibt Zeiten, in denen ich gesehen habe, dass Fenster an etwas hängen bleiben, und es besteht auf einem Neustart.

9
Aaron Weiker

Schließen Sie cmd und das Servicefenster, wenn Sie es geöffnet haben, und starten Sie cmd erneut, indem Sie mit der rechten Maustaste klicken und Als Administrator ausführen auswählen. Wenn sc delete sericeName nicht funktioniert oder nichts funktioniert.

http://weblogs.asp.net/avnerk/archive/2007/09/05/windows-services-services-msc-und-der-quot-this-service-is-marked-for-deletion-quot- error.aspx

4
incomplete

Leider müssen Sie den Server neu starten. .__ Das sollte den "gelöschten" Dienst entfernen. 

4
seanyboy

Für den Fall, dass diese Antwort jemandem hilft: Wenn Sie hier finden, können Sie sich beim Ausführen von Sysinternals Autoruns als Administrator ../ viel Zeit sparen.

Auf einer Maschine, auf der ich keine Berechtigung hatte, die Registrierung zu bearbeiten, kam es mir so vor.

3
Tan

Folgendes funktioniert ohne Neustart des Computers:

  1. Suchen Sie in der Registry\HKEY_LOCAL_MACHINE nach <Name Ihres Service> (sowohl Schlüssel als auch Werte)
  2. Setzen Sie den Wert "Legacy" auf 0
2
Dmitry

Ich komme zu spät, möchte aber eine Alternative hinzufügen, die seltsam aussehen kann, aber ich habe keinen anderen Weg gesehen:

Da ich meine Windows-Dienste jede Nacht in einem CI-Prozess installiere, brauchte ich etwas, das ständig funktioniert und vollständig automatisiert ist. Aus irgendeinem Grund wurden die Dienste nach der Deinstallation für längere Zeit (mindestens 5 Minuten) zum Löschen markiert. Daher habe ich das Batch-Skript für die Neuinstallation erweitert, um sicherzustellen, dass der Dienst wirklich gelöscht wird (vereinfachte Version):

REM Stop the service first
net stop My-Socket-Server

REM Same as installutil.exe, just implemented in the service
My.Socket.Server.exe /u

:loop1
    REM Easy way to wait for 5 seconds
    ping 192.0.2.2 -n 1 -w 5000 > nul
    sc delete My-Socket-Server
    echo %date% %time%: Trying to delete service.
    if errorlevel 1072 goto :loop1

REM Just for output purposes, typically I get that the service does not exist
sc query My-Socket-Server

REM Installing the new service, same as installutil.exe but in code
My.Socket.Server.exe /i

REM Start the new service
net start My-Socket-Server

Was ich sehen kann, ist, dass der Dienst für etwa 5 Minuten (!) Zum Löschen markiert ist, bis er schließlich durchläuft. Schließlich brauche ich keine manuellen Eingriffe mehr. Ich werde das Skript in Zukunft erweitern, so dass etwas nach einer bestimmten Zeit passiert (z. B. Benachrichtigung nach 30 Minuten).

1
marco

Haben Sie vor dem Aufrufen der Deinstallation versucht, den Dienst zu beenden? Ich hatte dieses Problem zufällig. Irgendwann konnte ich es ohne Neustart entfernen. Ich vermute, dass es damit zu tun hat, dass der Dienst noch läuft

1
faulty

Wenn Sie den Dienst in Services nicht beenden können, können Sie den Windows-Dienstexe in Task-Manager stoppen. Danach können Sie den Dienst entfernen.

0
Oguzhan KIRCALI

Stellen Sie außerdem sicher, dass keine Instanzen der ausführbaren Datei aktiv sind (möglicherweise eine, die aus irgendeinem Grund unabhängig vom Dienst ausgeführt wurde). 

Ich habe MMC geöffnet und geschlossen und habe nach den PIDs gesucht, die zu töten waren - aber beim Durchsuchen des Prozess-Explorers gab es ein paar vorhandene Prozesse, die aus einem vergessenen geplanten Stapel ausgeführt wurden. Tötete sie Job erledigt. 

0
Unsliced

Das Aktualisieren der Serviceliste hat es immer für mich getan. Wenn das Servicefenster geöffnet ist, wird aus irgendeinem Grund etwas vorhandener Speicher vorhanden sein. F5 und ich werde wieder neu installieren!

0
Jer

Es gibt viele Forumfragen zu diesem Thema.

Ich habe die Antwort in Windows API gefunden. Sie müssen den Computer nach der Deinstallation des Dienstes nicht neu starten. Sie müssen anrufen: 

BOOL WINAPI CloseServiceHandle(
  SC_HANDLE hSCObject
);

Das schließt den Griff des Dienstes. Unter Windows 7 wurde mein Problem gelöst .. Ich mache:

  • dienst anhalten
  • griff schließen
  • deinstallationsdienst 
  • warte 3 sek 
  • kopiere das neue exe in das Verzeichnis 
  • installieren Sie den Dienst 
  • dienst starten 
  • griff schließen
0
Gabor Balazs

Ich verwende die folgende PowerShell, die an einigen Stellen zusammengebaut ist, für unsere Octopus Deploy-Instanzen, wenn TopShelf versagt oder ein Dienst aus einem anderen Grund ausfällt.

$ServiceName = 'MyNaughtyService'
$ServiceName | Stop-Service -ErrorAction SilentlyContinue
# We tried nicely, now KILL!!!
$ServiceNamePID = Get-Service | Where { $_.Name -eq $ServiceName} # If it was hung($_.Status -eq 'StopPending' -or $_.Status -eq 'Stopping') -and
$ServicePID = (Get-WmiObject Win32_Service | Where {$_.Name -eq $ServiceNamePID.Name}).ProcessID
Stop-Process $ServicePID -Force
0
dragon788

Das hat bei mir funktioniert

$a = Get-WmiObject Win32_Service | Where-Object {$_.Name -eq 'psexesvc'}
$a.Delete()
0
expirat001

Sie können den Registrierungsschlüssel für Ihren Dienst unter HKLM\SYSTEM\CurrentControlSet\Services manuell löschen. Danach wird der Dienst nicht im Dienststeuerungs-Manager angezeigt (Sie müssen aktualisieren oder erneut öffnen, um die Änderung zu sehen) und Sie können den Dienst wie gewöhnlich neu installieren.