Criar o serviço Windows a partir do executável
Existe alguma forma rápida de, dado um ficheiro executável, criar um serviço Windows que, quando iniciado, o lança?
6 answers
Para criar um serviço Windows a partir de um executável, você pode usar sc.exe
:
sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"
Você deve ter aspas em torno do caminho real exe
, e um espaço depois do binPath=
.
Mais informações sobre o comando sc
podem ser encontradas no Microsoft KB251192 .
Note que não funcionará para qualquer executável: o executável deve ser um serviço Windows ( ou seja, implementa ServiceMain). Ao registrar um executável Não-serviço como um serviço, você terá o seguinte erro ao tentar iniciar o serviço:
Erro 1053: O serviço não respondeu atempadamente ao pedido de início ou controlo.
Existem ferramentas que podem criar um serviço Windows a partir de executáveis arbitrários, não-service, veja as outras respostas para exemplos de tais ferramentas.
Usar o Nssm (O Gestor de serviços que não Chupa ) para executar A.Morcego ou qualquer um .Ficheiro EXE como serviço.
- Passo 1 : Obter Nssm
- Passo 2 : Instale o seu sevice com {[[0]}
- Passo 3 : Isto irá abrir uma interface que irá usar para localizar o seu executável
Passo 1: transferência & Unzip nssm-2, 24.zip
Passo 2: do tipo da linha de comandos:
C:\> nssm.exe install [servicename]
Ele irá abrir a interface gráfica abaixo (o exemplo é o servidor UT2003), então basta navegar para: yourapplication.exe
Mais informações sobre: https://nssm.cc/usage
Para o cenário acima descrito, criei serman , uma ferramenta de linha de comandos para instalar um executável como um serviço. Tudo o que você precisa para escrever (e só escrever uma vez) é um arquivo de configuração de serviço simples, juntamente com o seu executável. Corre
serman install <path_to_config_file>
Irá instalar o serviço. stdout
e stderr
estão todos registados. Para mais informações, dê uma olhada no site do projeto .
Um ficheiro de configuração de trabalho é muito simples, como demonstrado abaixo. Mas também tem muitas características úteis, como <env>
e <persistent_env>
abaixo.
<service>
<id>hello</id>
<name>hello</name>
<description>This service runs the hello application</description>
<executable>node.exe</executable>
<!--
{{dir}} will be expanded to the containing directory of your
config file, which is normally where your executable locates
-->
<arguments>"{{dir}}\hello.js"</arguments>
<logmode>rotate</logmode>
<!-- OPTIONAL FEATURE:
NODE_ENV=production will be an environment variable
available to your application, but not visible outside
of your application
-->
<env name="NODE_ENV" value="production"/>
<!-- OPTIONAL FEATURE:
FOO_SERVICE_PORT=8989 will be persisted as an environment
variable to the system.
-->
<persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
sc install <service_name> binpath=<binary_path>
sc stop <service_name>
sc queryex <service_name>
sc delete <service_name>
Se o seu nome de Serviço tiver espaços, inclua "aspas".