Eu tenho um serviço do Windows que faz uso de um banco de dados SQL Server. Não tenho controle sobre a instalação do serviço, mas gostaria de adicionar uma dependência no serviço para garantir que ele seja iniciado após o início do SQL Server. (O SQL Server está sendo executado na mesma máquina que o serviço em questão)
Existe uma ferramenta para adicionar uma dependência ou possivelmente editar o registro diretamente?
Isso também pode ser feito por meio de um prompt de comando elevado usando o
sc
comando. A sintaxe é:Nota : Há um espaço após o sinal de igual e não há um antes dele.
Aviso :
depend=
o parâmetro substituirá a lista de dependências existente, não anexará. Assim, por exemplo, se ServiceA já depende de ServiceB e ServiceC, se você executardepend= ServiceD
, ServiceA agora dependerá apenas de ServiceD. (Obrigado Matheus !)Exemplos
Dependência de outro serviço:
Acima significa que o ServiceA não será iniciado até que o ServiceB seja iniciado. Se você interromper o ServiceB, o ServiceA será interrompido automaticamente.
Dependência de vários outros serviços:
Acima significa que ServiceA não será iniciado até que ServiceB, ServiceC e ServiceD tenham sido iniciados. Se você interromper qualquer ServiceB, ServiceC ou ServiceD, o ServiceA será interrompido automaticamente.
Para remover todas as dependências:
Para listar as dependências atuais:
Você pode adicionar dependências de serviço adicionando o valor "DependOnService" ao serviço no registro usando o
regedit
comando, os serviços podem ser encontrados emHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service name>
. Os detalhes podem ser encontrados no artigo 193888 do MS KB , do qual o seguinte é um trecho de:Eu estava procurando por um método puramente PowerShell (sem regedit ou sc.exe) que pudesse funcionar em 2008R2/Win7 e mais recente, e cheguei a isso:
Fácil é fazer o regedit com o PowerShell:
Ou, usando WMI:
O método Change da classe Win32_Service ajudou a apontar para uma solução:
Eu escrevi um aplicativo .net simples para gerenciar dependências de serviço, se você estiver interessado. É grátis.
http://webpages.charter.net/bushman4/servicedependencymanager.html
Em C++ (ATL) eu fiz assim