Próbuję usunąć usługę systemu Windows sc delete <service name>
i napotkałem następujący błąd:
[SC] DeleteService FAILED 1072:
Określona usługa została oznaczona do usunięcia.
Co już zrobiłem:
Oczywiście zatrzymałem usługę.
sc queryex "<service name>"
Daje następujący wynik:SERVICE_NAME: Stub service TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 1067 (0x42b) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 PID : 0 FLAGS :
Upewnij się, że Microsoft Management Console jest zamknięta (
taskkill /F /IM mmc.exe
),-
Z powodu tego usunięcia
services.msc
nadal wyświetla usługę (z nazwą, ale nie ma statusu ani typu uruchamiania), ale jej opis to „<Nie można odczytać opisu. Kod błędu: 2> ”. Podczas próby wyświetlenia właściwości „System nie może znaleźć określonego pliku”. jest wyświetlany pięć razy.
Problem nadal występuje.
Jaki jest następny krok?
windows-services
Arseni Mourzenko
źródło
źródło
Odpowiedzi:
Może istnieć kilka przyczyn, które powodują, że usługa utknęła w „oznaczonym do usunięcia”.
Eksplorator procesów SysInternals jest otwarty . Zamknięcie powinno doprowadzić do automatycznego usunięcia usługi.
Menedżer zadań jest otwarty .
Microsoft Management Console (MMC) jest otwarty . Aby upewnić się, że wszystkie instancje są zamknięte, uruchom
taskkill /F /IM mmc.exe
.Konsola usług jest otwarta . Jest to to samo, co w poprzednim punkcie, ponieważ konsola usług jest hostowana przez MMC.
Przeglądarka zdarzeń jest otwarta . Znów jest to to samo co trzeci punkt.
Klucz HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ {nazwa usługi} istnieje .
Ktoś inny jest zalogowany na serwerze i ma otwartą jedną z wyżej wymienionych aplikacji.
Instancja programu Visual Studio używana do debugowania usługi jest otwarta.
źródło
Może to być również spowodowane pozostawieniem otwartej konsoli usług. System Windows nie usunie usługi, dopóki nie zostanie ona zamknięta.
źródło
Miałem ten sam problem, w końcu postanowiłem zabić proces obsługi.
w tym celu spróbuj wykonać następujące czynności:
uzyskać identyfikator procesu usługi za pomocą
sc queryex <service name>
zabić proces za pomocą
taskkill /F /PID <Service PID>
źródło
W moim przypadku zadziałało po zamknięciu
Services
. Sprawdź, czyServices.msc
jest otwarty, jeśli tak, zamknij go i sprawdź, czy proces obsługi znajduje się wTask Manager
.źródło
Oznacza to, że usługa jest nadal wymieniona jako wyłączona w services.msc. Wystarczy zamknąć services.msc i ponownie otworzyć jako administrator ... Usługa nie będzie na liście. Teraz zainstaluj usługę za pomocą polecenia,
installutil „ścieżka usługi”
źródło
Usunięcie kluczy rejestru jak sugerowano powyżej spowodowało, że moja usługa utknęła w stanie zatrzymania. Dla mnie zadziałała następująca procedura:
otwórz menedżera zadań> wybierz kartę usług> wybierz usługę> kliknij prawym przyciskiem myszy i wybierz „przejdź do procesu”> kliknij prawym przyciskiem myszy proces i wybierz opcję Zakończ proces
Po tym usługi powinny zniknąć
źródło
Odkryłem jeszcze jedną rzecz do sprawdzenia - zajrzyj do Menedżera zadań - jeśli inni użytkownicy są podłączeni do tego pola, nawet jeśli są „rozłączeni”, musisz je faktycznie wylogować, aby usługa mogła w końcu usunąć.
źródło
Wydaje się, że w wersjach systemu Windows późniejszych niż Windows 7 (niezweryfikowany, ale z najnowszego doświadczenia z Windows Server 2012 R2) Menedżer kontroli usług (SCM) jest bardziej rygorystyczny.
Podczas gdy w Windows 7 po prostu spawnuje inny proces, teraz sprawdza, czy proces usługi jest nadal w pobliżu i może zwrócić ERROR_SERVICE_MARKED_FOR_DELETE (1072) dla każdego kolejnego wywołania CreateService / DeleteService, nawet jeśli usługa wydaje się być zatrzymana.
Mówię tutaj o kodzie API systemu Windows, ale chcę jasno opisać, co się dzieje, więc ta sekwencja może prowadzić do wspomnianego błędu:
Powód, dla którego proces serwisowy jest nadal dostępny po tym, jak już zgłosił swój stan SERVICE_STOPPED, nie jest zaskakujący. Jest to zwykły proces, którego główny wątek „utknął” w wywołaniu
StartServiceCtrlDispatcher
interfejsu API, więc najpierw reaguje na akcję zatrzymania sterowania, a następnie musi wykonać pozostałą sekwencję kodu.To trochę niefortunne, że SCM / OS nie radzi sobie z tym poprawnie. Programowe rozwiązanie jest dość proste i dokładne: uzyskaj uchwyt procesu wykonywalnego usługi przed zatrzymaniem usługi, a następnie poczekaj, aż ten uchwyt zostanie zasygnalizowany.
Jeśli podchodzisz do problemu z punktu widzenia administracji systemu, rozwiązaniem jest również poczekanie, aż proces serwisowy całkowicie zniknie.
źródło
Właśnie to działało dla mnie: - Dotknąłem tego samego problemu: moja usługa utknęła w „oznaczonym do usunięcia”. - Otworzyłem services.msc Moja usługa pojawiła się jako uruchomiona, chociaż została już odinstalowana. - Kliknąłem Stop Otrzymałem komunikat o błędzie, informujący, że usługa nie jest w stanie odbierać komunikatów sterujących. Niemniej jednak usługa została zatrzymana. - Zamknięte usługi. Msc. - Ponownie otwarte services.msc. - Usługa zniknęła (nie wyświetla się już na liście usług).
(Środowisko to Windows 7.)
źródło
W moim przypadku wykonuję
taskkill /f /im dongleserver.exe
, gdziedongleserver.exe
jest plik exe mojego programu.Wtedy będę mógł ponownie zainstalować mój program.
źródło
W moim przypadku było to spowodowane nieobsługiwanym wyjątkiem podczas tworzenia źródła eventLog. Użyj try catch, aby wskazać przyczynę.
źródło
Zamknięcie każdego aktualnie otwartego okna, a następnie uruchomienie następującego polecenia rozwiązało problem:
źródło
Zamknięcie konsoli usług zgodnie z sugestią kilku odpowiedzi tutaj pozwoliło mi usunąć usługę. W moim scenariuszu była to tylko krótkoterminowa poprawka, ponieważ wszystkie kolejne instalacje i usunięcie usługi wymagałyby ode mnie podjęcia dodatkowych kroków. Przeglądając mój plik web.config, odkryłem, że wystąpił błąd, który raz naprawiony, pozwolił mi łatwo usunąć usługę bez dodatkowego zamykania kroku konsoli usług.
źródło
To działa dla mnie.
Drzewo zakończenia procesu zakończy proces i wszystkie procesy utworzone przez proces.
Następnie możesz ponownie zainstalować usługę.
źródło
W moim przypadku nazwa usługi brzmiała „Monitor”, która jest również używana przez usługę systemu Windows o nazwie „Monitor”, kiedy próbowałem zaktualizować swoje usługi, próbowałem je odinstalować, instalator próbował usunąć usługę systemu Windows „Monitor”, którą on nie mógł, a instalacja zawsze była wycofywana.
Ostatecznie zmieniłem nazwę mojej usługi na coś innego
źródło
Jeśli kroki dostarczone przez @MainMa nie zadziałały, wykonaj następujące czynności
Krok 1 Spróbuj zabić proces z menedżera zadań systemu Windows lub za pomocą taskkill / F / PID. Możesz znaleźć pid procesu za pomocą polecenia „sc queryex”. Spróbuj wykonać następny krok, jeśli nadal nie możesz odinstalować.
Krok 2 Jeśli powyżej
Uruchom Autoruns dla Windows Wyszukaj usługę według nazwy i usuń wyniki.
źródło
Głównym powodem błędu jest to, że proces nie został zatrzymany. aby go rozwiązać, uruchom menedżera zadań i przejdź do usług i sprawdź, czy nadal widzisz swoją usługę, niż przejdź do procesu tej usługi i zakończ proces. Następnie problem zostanie rozwiązany całkowicie.
źródło
Miałem ten problem, gdy korzystałem z weryfikatora aplikacji do weryfikacji mojej usługi win. Nawet po zamknięciu aplikacji Ver moja usługa została zablokowana przed usunięciem. Tylko usunięcie usługi z App Ver rozwiązało problem i usługa została natychmiast usunięta. Wygląda na to, że jakiś proces nadal korzysta z Twojej usługi po próbie jej usunięcia.
źródło
kroki do naśladowania:
krok 1 dostałem lokalizację C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319
krok 2 uruchom polecenie: installutil / u pełna ścieżka / nazwa_usługi.exe
krok 3 zamknij panel usług i otwórz go ponownie
krok 4 uruchom polecenie: installutil full-path / servicename.exe
źródło
Najprawdopodobniej usunięcie usługi kończy się niepowodzeniem, ponieważ
zgłaszaj błąd podczas zatrzymywania usługi. zawijanie rzeczy w ramach catch catch zapobiegnie błędowi oznaczenia do usunięcia
}
źródło
Czasami może się to zdarzyć podczas usuwania usługi za pomocą skryptu sesji zdalnej PowerShell, szczególnie gdy próbujesz usunąć usługę kilka razy. W takim przypadku spróbuj odtworzyć sesję przed usunięciem:
źródło