Existe alguma maneira rápida de, dado um arquivo executável, criar um serviço do Windows que, quando iniciado, o inicia?
Existe alguma maneira rápida de, dado um arquivo executável, criar um serviço do Windows que, quando iniciado, o inicia?
Respostas:
Para criar um serviço do 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 no exe
caminho real e um espaço após o binPath=
.
Mais informações sobre o sc
comando podem ser encontradas no Microsoft KB251192 .
Observe que ele não funcionará para nenhum executável: o executável deve ser um serviço do Windows ( ou seja, implementar o ServiceMain ). Ao registrar um executável que não seja de serviço como um serviço, você receberá o seguinte erro ao tentar iniciar o serviço:
Erro 1053: O serviço não respondeu à solicitação de início ou controle em tempo hábil.
Existem ferramentas que podem criar um serviço do Windows a partir de executáveis arbitrários que não são de serviço; consulte as outras respostas para exemplos de tais ferramentas.
binpath=
ter que colocar o caminho do executável entre aspas duplas está totalmente errado, pelo menos para o Windows 10. a citação é necessária se e somente se o caminho contiver caracteres especiais como espaço em branco. Além disso, o revestimento (lowe / maiúsculas / minúsculas) não importa em lugar algum, também nos nomes de variáveis, e displayname="my service"
é outro item a ser transmitido na linha de comando ao criar um serviço para exibir como a primeira linha ( Name
) em services.msc
.
binPath=
foi necessário para mim no Windows 7, mas não no Windows 10
Use o NSSM ( o Gerenciador de serviços que não é de sucção ) para executar um arquivo .BAT ou qualquer arquivo .exe como um serviço.
nssm.exe install [serviceName]
Extensão da resposta (Kevin Tong).
Etapa 1: Baixar e descompactar nssm-2.24.zip
Etapa 2: Na linha de comando, digite:
C:\> nssm.exe install [servicename]
ele abrirá a GUI como abaixo (o exemplo é o servidor UT2003) e simplesmente navegue até: yourapplication.exe
Mais informações em: https://nssm.cc/usage
nssm.exe install [serviceName]
. Essa solução funciona, mas se você tiver um aplicativo GUI, não funcionará no Win Serever2003. Se mais tarde você quiser removê-lo, usenssm.exe remove [youservicename]
nginx
não é necessário e enganoso. O comando funcionará sem ele também. É um parâmetro opcional se você deseja fornecer o nome do serviço no prompt de comando.
Muitas respostas existentes incluem intervenção humana no momento da instalação. Este pode ser um processo propenso a erros. Se você tem muitos executáveis desejados para serem instalados como serviços, a última coisa que você quer fazer é executá-los manualmente no momento da instalação.
No cenário descrito acima, criei o serman , uma ferramenta de linha de comando para instalar um executável como serviço. Tudo o que você precisa escrever (e escrever apenas uma vez) é um arquivo de configuração de serviço simples, juntamente com o seu executável. Corre
serman install <path_to_config_file>
instalará o serviço. stdout
e stderr
estão todos registrados. Para mais informações, consulte o site do projeto .
Um arquivo de configuração de trabalho é muito simples, como demonstrado abaixo. Mas também possui muitos recursos ú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>
esses extras são úteis .. precisam ser executados como administrador
sc create <service_name> binpath=<binary_path>
sc stop <service_name>
sc queryex <service_name>
sc delete <service_name>
Se o nome do seu serviço tiver espaços, coloque "aspas".
sc create <service_name> binpath= <binary_path>
Você pode conferir meu pequeno utilitário gratuito para obter as operações de criação, edição e exclusão de serviços. Aqui está o exemplo de criação:
Vá para Serviço -> Modificar -> Criar
Arquivo executável (google drive): [Download]
Código fonte: [Download]
Postagem no blog: [BlogLink]
Classe do editor de serviço: WinServiceUtils.cs