Ich habe einen Windows-Dienst mit installUtil.exe installiert.
Nach dem Aktualisieren des Codes habe ich installUtil.exe erneut verwendet, um den Dienst zu installieren, ohne zuerst die Originalversion zu deinstallieren.
Wenn ich jetzt versuche, den Dienst zu deinstallieren, schließt installUtil.exe die Deinstallation erfolgreich ab, aber der Dienst wird weiterhin angezeigt.
Wenn ich versuche, seine Eigenschaften zu ändern, erhalte ich die Meldung "Dienst ist zum Löschen markiert".
Wie kann ich das Löschen erzwingen (vorzugsweise ohne den Server neu zu starten)?
.net
windows-services
Manu
quelle
quelle
Antworten:
Eine Sache, die mich in der Vergangenheit aufgefallen ist, ist, dass wenn der Service Viewer ausgeführt wird, dadurch verhindert wird, dass die Services vollständig gelöscht werden. Schließen Sie dies also vorher
quelle
Sie müssen Ihren Computer nicht neu starten. Starten Sie cmd oder PowerShell im erhöhten Modus.
Dann bekommst du ein paar Infos. Eine PID-Nummer wird angezeigt.
Wo / f soll Stopp stoppen.
Jetzt können Sie Ihren Dienst installieren oder starten.
quelle
sc.exe queryex <SERVICENAME>
. Dasc
es auch ein Alias für istSet-Content
, wird es lautlos fehlschlagen, wenn Sie das verwenden.Nun, Sie können SC.EXE verwenden, um Windows-Dienste zwangsweise zu löschen, wenn die Deinstallation nicht zufällig entfernt wird.
Lesen Sie mehr über "MS Techno Blogging" Löschen von Diensten mit Gewalt aus Services MMC
quelle
sc delete
meldet auch "Dienst ist zum Löschen markiert", wenn für den Dienst ein Handle geöffnet ist.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 Dienstmanagers wurde sowohl der Eintrag aus der Registrierung entfernt als auch die Deinstallation des Dienstes abgeschlossen.
Zuvor hatte das Aktualisieren des Servicemanagers nicht geholfen.
quelle
Stellen Sie einfach sicher, dass der Dienst beendet ist, bevor Sie dies tun. Ich habe diese Arbeit meistens gesehen. Es gibt Zeiten, in denen ich gesehen habe, dass Windows an etwas hängen bleibt und es auf einem Neustart besteht.
quelle
Schließen Sie das Fenster cmd und services, wenn es geöffnet ist, 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 irgendetwas nicht funktioniert.http://weblogs.asp.net/avnerk/archive/2007/09/05/windows-services-services-msc-and-the-quot-this-service-is-marked-for-deletion-quot-error. aspx
quelle
Leider müssen Sie den Server neu starten. Das sollte den "gelöschten" Dienst entfernen.
quelle
Nur für den Fall, dass diese Antwort jemandem hilft: Wie hier zu finden , können Sie sich viel Mühe ersparen, Sysinternals Autoruns als Administrator auszuführen . Gehen Sie einfach zur Registerkarte "Dienste" und löschen Sie Ihren Dienst.
Es hat den Trick für mich auf einem Computer gemacht, auf dem ich keine Berechtigung zum Bearbeiten der Registrierung hatte.
quelle
Sie können den Registrierungsschlüssel für Ihren Dienst, der sich unter befindet
HKLM\SYSTEM\CurrentControlSet\Services
, manuell löschen. Danach wird der Dienst im Dienststeuerungs-Manager nicht mehr angezeigt (muss aktualisiert oder erneut geöffnet werden, um die Änderung anzuzeigen), und Sie können den Dienst wie gewohnt neu installieren.quelle
Folgendes funktioniert ohne Neustart des Computers:
quelle
Haben Sie versucht, den Dienst zu beenden, bevor Sie Deinstallation aufrufen? Ich hatte dieses Problem zufällig. Irgendwann konnte ich es entfernen, ohne neu zu starten. Ich vermute, dass es mit dem noch laufenden Dienst zu tun hat
quelle
Ich bin spät dran, möchte aber eine Alternative hinzufügen, die vielleicht seltsam aussieht, 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 immer für eine lange Zeit (5 Minuten oder länger) 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):
Was ich sehen kann, ist, dass der Dienst für ca. 5 Minuten (!) Zum Löschen markiert ist, bis er schließlich ausgeführt wird. Schließlich brauche ich keine manuellen Eingriffe mehr. Ich werde das Skript in Zukunft so erweitern, dass nach einer bestimmten Zeit etwas passiert (z. B. Benachrichtigung nach 30 Minuten).
quelle
Das hat bei mir funktioniert
quelle
ReturnValue : 16
, ist der Befehl mit " Dieser Dienst wird vom System entfernt " fehlgeschlagen . Vollständige Liste der ReturnValues von Microsoft hierWenn Sie den Dienst nicht in stoppen Diensten , können Sie Ihren Windows - Dienst exe in beenden Task - Manager . Danach können Sie den Dienst entfernen.
quelle
Das Aktualisieren der Serviceliste hat es immer für mich getan. Wenn das Dienstfenster geöffnet ist, enthält es aus irgendeinem Grund einen Speicher. F5 und ich installiere wieder!
quelle
Stellen Sie außerdem sicher, dass keine Instanzen der ausführbaren Datei noch aktiv sind (möglicherweise eine, die aus irgendeinem Grund unabhängig vom Dienst ausgeführt wurde).
Ich habe MMC geöffnet und geschlossen und nach den zu tötenden PIDs gesucht - aber als ich im Prozess-Explorer nachgesehen habe, gab es einige vorhandene Prozesse, die von einem vergessenen geplanten Stapel ausgeführt wurden. Hat sie getötet. Job erledigt.
quelle
Zu diesem Thema gibt es viele Forumfragen.
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:
Das schließt den Griff des Dienstes. Unter Windows 7 hat es mein Problem gelöst. Ich mache:
quelle
Ich verwende die folgende PowerShell, die an einigen Stellen für unsere Octopus Deploy-Instanzen zusammengeschustert wurde, wenn TopShelf Fehler macht oder ein Dienst aus einem anderen Grund ausfällt.
quelle
Es ist auch erwähnenswert, dass dies:
funktioniert nicht in PowerShell, sc ist ein Alias für das Cmdlet Set-Content in PowerShell. Sie müssen tun:
quelle