Jak odinstalować usługę Windows, gdy w systemie nie ma dla niej pliku wykonywalnego?

166

Jak odinstalować usługę systemu Windows, gdy w systemie nie ma dla niej pliku wykonywalnego? Nie mogę uruchomić, installutil -uponieważ w systemie nie ma pliku wykonywalnego. Nadal widzę wpis dotyczący usługi w konsoli Usługi.

Przyczyną tego stanu jest prawdopodobnie problem w pakiecie msi, który nie usuwa usługi poprawnie, ale jak to naprawić, gdy usługa jest w tym stanie?

Magnus Lindhe
źródło

Odpowiedzi:

325

Powinno być możliwe odinstalowanie go za pomocą programu sc.exe (wydaje mi się, że jest on dołączony do zestawu Windows Resource Kit), uruchamiając następujące polecenie w wierszu polecenia „administratora”:

sc.exe delete <service name>

gdzie <service name>jest nazwa samej usługi, tak jak ją widzisz w konsoli zarządzania usługami, a nie w exe.

Możesz znaleźć sc.exe w folderze System i wymaga uprawnień administratora do uruchomienia. Więcej informacji w tym artykule bazy wiedzy Microsoft .

Alternatywnie możesz bezpośrednio wywołać interfejs API DeleteService () . Ten sposób jest nieco bardziej złożony, ponieważ musisz uzyskać uchwyt do menedżera kontroli usług za pośrednictwem OpenSCManager () i tak dalej, ale z drugiej strony zapewnia większą kontrolę nad tym, co się dzieje.

Treb
źródło
Zrobił dokładnie to, co chciałem i usunął usługę z rejestru. Nie pojawia się już w konsoli usług. Dzięki!
Magnus Lindhe
Otrzymuję komunikat „Odmowa dostępu”. Co zrobic nastepnie?
Nick
4
Tylko uwaga dla każdego, kto próbuje wykonać polecenie w metodzie 1 w PowerShell: sc nie służy do komunikacji z menedżerem kontroli usług. Jest to polecenie Set-Content. Zamiast tego użyj programu sc.exe.
Yasser Sinjab
1
Jeśli pojawi się błąd 1072, upewnij się, że nie masz otwartego panelu sterowania usług (zobacz to drugie pytanie )
Giles,
Otrzymałem poniższy błąd. [SC] OpenService FAILED 1060: Określona usługa nie istnieje jako usługa zainstalowana. Później wypróbowałem to samo z powłoką mocy i działa!
crazydan
24

Usuń usługę Windows za pośrednictwem rejestru

Bardzo łatwo jest usunąć usługę z rejestru, jeśli znasz właściwą ścieżkę. Oto jak to zrobiłem:

  1. Uruchom Regedit lub Regedt32

  2. Przejdź do wpisu rejestru „HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services”

  3. Poszukaj usługi, którą chcesz usunąć, i usuń ją. Możesz spojrzeć na klucze, aby dowiedzieć się, jakie pliki były używane przez usługę, i je również usunąć (w razie potrzeby).

Usuń usługę Windows za pomocą okna poleceń

Alternatywnie możesz również użyć wiersza polecenia i usunąć usługę za pomocą następującego polecenia:

sc usuń

Możesz również utworzyć usługę za pomocą następującego polecenia

sc utwórz „MorganTechService” binpath = „C: \ Program Files \ MorganTechSPace \ myservice.exe”

Uwaga: może być konieczne ponowne uruchomienie systemu, aby zaktualizować listę w menedżerze usług.

kombsh
źródło
3
Czy robienie tego w rejestrze jest bezpieczne? Czy „ostateczny wynik” rejestru jest taki sam jak „końcowy wynik” sc delete?
Pacerier,
5
Nie, właśnie próbowałem bezpośrednio usunąć usługę z regedit. W rezultacie, teraz wpis usługi, którą chciałem usunąć, pozostaje w usłudze, podczas gdy jej opis pokazuje: "<Nie można odczytać opisu. Kod błędu: 2>"
GJ.
11

znaleźć tutaj

Właśnie próbowałem na Windows XP, zadziałało

komputer lokalny: sc \\. usuń [nazwa usługi]

  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
źródło
10

Oto skrypt PowerShell służący do usuwania usługi foo

$foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'"
$foo.delete()
Nima Soroush
źródło
9

Moim ulubionym sposobem jest użycie aplikacji Sysinternals Autoruns . Po prostu wybierz usługę i naciśnij Usuń.

Thomas Bratt
źródło
Dlaczego po prostu nie użyć sc delete?
Pacerier,
3

Utwórz kopię plików wykonywalnych tej samej usługi i wklej ją w tej samej ścieżce do istniejącej usługi, a następnie odinstaluj.

Samiksha
źródło
To dobra sugestia. Jeśli to nie zadziała, może wymagać ponownej instalacji, uruchomienia installutil -u, a następnie odinstalowania
wcm
czy musimy utworzyć kopię tego samego exe lub zmiana nazwy innego pliku będzie działać dobrze?
Imran Rizvi
@Samiksha, myślałem, że powiedział, że nie ma „ kopii plików wykonywalnych ”?
Pacerier