Como desinstalar um serviço do Windows quando não há um executável disponível no sistema?

166

Como desinstalo um Serviço do Windows quando não há nenhum executável para ele no sistema? Não consigo executar, installutil -upois não há executável no sistema. Ainda consigo ver uma entrada para o serviço no console de Serviços.

A razão para esse estado é provavelmente devido a um problema no pacote msi que não remove o serviço corretamente, mas como corrigi-lo quando o serviço está nesse estado?

Magnus Lindhe
fonte

Respostas:

325

Você poderá desinstalá-lo usando o sc.exe (acho que está incluído no Windows Resource Kit) executando o seguinte em um prompt de comando "administrador":

sc.exe delete <service name>

onde <service name>é o nome do serviço em si como você o vê no console de gerenciamento de serviços, não no exe.

Você pode encontrar sc.exe na pasta Sistema e precisa de privilégios administrativos para executar. Mais informações neste artigo da Microsoft KB .

Como alternativa, você pode chamar diretamente a API DeleteService () . Dessa forma, é um pouco mais complexo, já que você precisa controlar o gerenciador de controle de serviços via OpenSCManager () e assim por diante, mas, por outro lado, oferece mais controle sobre o que está acontecendo.

Treb
fonte
Ele fez exatamente o que eu queria e removeu o serviço do registro. Ele não aparece mais no console de Serviços. Obrigado!
Magnus Lindhe
Recebo "Acesso negado". o que fazer a seguir?
22416 Nick
4
Apenas uma observação para quem tenta executar o comando no Método 1 no PowerShell: sc não é para se comunicar com o gerenciador de controle de serviço. É o comando Set-Content. Use sc.exe.
precisa saber é o seguinte
1
Se você receber erro 1072, certifique-se que você não tem o painel de controle serviços abertos (ver esta outra questão )
Giles
Eu estava recebendo o erro abaixo. [SC] OpenService FAILED 1060: O serviço especificado não existe como serviço instalado. Mais tarde tentei o mesmo com o shell de energia e funciona!
crazydan 28/09/19
24

Remover serviço do Windows via registro

É muito fácil remover um serviço do registro, se você souber o caminho certo. Aqui está como eu fiz isso:

  1. Execute o Regedit ou o Regedt32

  2. Vá para a entrada do registro "HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services"

  3. Procure o serviço que você deseja excluir e exclua. Você pode consultar as chaves para saber quais arquivos o serviço estava usando e excluí-las também (se necessário).

Excluir serviço do Windows via janela de comando

Como alternativa, você também pode usar o prompt de comando e excluir um serviço usando o seguinte comando:

sc delete

Você também pode criar um serviço usando o seguinte comando

sc criar "MorganTechService" binpath = "C: \ Arquivos de Programas \ MorganTechSPace \ myservice.exe"

Nota: Pode ser necessário reiniciar o sistema para atualizar a lista no gerenciador de serviços.

kombsh
fonte
3
Fazer o registro é seguro? O "resultado final" do registro é igual ao "resultado final" de sc delete?
Pacerier
5
Não, eu apenas tentei excluir um serviço do regedit diretamente. Como resultado, agora a entrada do serviço que eu queria excluir permanece em Serviço, enquanto a Descrição mostra: "<Falha ao Ler Descrição. Código de Erro: 2>"
GJ.
11

encontrado aqui

Eu apenas tentei no Windows XP, funcionou

computador local: sc \\. excluir [nome do serviço]

  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
fonte
10

Aqui está o script do PowerShell para excluir um serviço foo

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

Minha maneira favorita de fazer isso é usar o aplicativo Sysinternals Autoruns . Basta selecionar o serviço e pressionar Excluir.

Thomas Bratt
fonte
Por que não usar simplesmente sc delete?
Pacerier
3

Crie uma cópia dos executáveis ​​do mesmo serviço e cole-a no mesmo caminho do serviço existente e depois desinstale.

Samiksha
fonte
Essa é uma boa sugestão. Se isso não funcionar, ele pode precisar reinstalar, execute installutil -u, e depois desinstalação
WCM
temos que criar a cópia do mesmo exe ou renomear qualquer outro arquivo funcionaria bem?
Imran Rizvi
@ Samiksha, eu pensei que ele disse que não tinha " uma cópia dos executáveis "?
Pacerier