Não é possível iniciar o serviço na janela 10 usando o NSSM

2

Eu criei um pequeno arquivo de script para testar.

Este meu arquivo script.bat .

sc create myService binpath= C:\Users\Admin\Desktop\test.bat start= auto 

Este é o meu arquivo test.bat .

echo "Welcome to Wizard"

Declaração do problema

Não consigo iniciar o serviço na seção painel de controle .

Recebo o seguinte erro.

[SC] StartService FALHOU 1053:     O serviço não respondeu à solicitação de início ou controle em tempo hábil.

É por isso que estou usando o nssm.

AGORA o que acontece é que quando eu corro o seguinte comando no powershell

. \ nssm install myService , aparece a caixa de diálogo. Eu dou o caminho do meu arquivo de script e clico em instalar o serviço.

Após a instalação bem-sucedida do serviço. Eu vou ao painel de controle - > Serviço - > clique em iniciar contra myService , mas ele será pausado e a caixa de diálogo a seguir será exibida

O Windows não pôde iniciar o serviço myService no Computador Local. O serviço não retornou um erro. Isso pode ser erro do Windows ou erro de serviço interno. Se o problema persistir, entre em contato com o administrador do sistema.

  1. Como posso corrigir isso?
  2. Existe outra maneira de fazer isso sem executar etapas manuais e não usar ferramenta de terceiros.
  3. Estou fazendo tudo isso na janela 10. Preciso de algum servidor para executar essa tarefa?

OBSERVAÇÃO: não consigo usar o Always up ou o agendador de janelas no meu caso.

    
por miki 16.08.2017 / 11:31

2 respostas

2

O comportamento do NSSM é causado pelo script terminar quase instantaneamente. Experimente o seguinte script:

echo Hello World
pause

Isso deve permitir que o serviço seja iniciado, mas você não verá necessariamente uma janela do console. Mesmo que você marque 'permitir que o serviço interaja com a área de trabalho', não será a sua área de trabalho com a qual ele interage!

Usando o SysInternals Process Explorer, você poderá ver o serviço NSSM sendo executado com um processo filho CMD que está executando o script.

O Windows implementa o 'isolamento zero da sessão' como um recurso de segurança, e isso essencialmente impede que os serviços interajam com os desktops do usuário final.

Em termos de uma solução, é possível escrever aplicações de 'serviço' do Windows de forma bastante simples usando o Visual Studio. Está fora da minha área de especialização, mas com base nos aplicativos do Windows que eu conheço, você geralmente teria um aplicativo em modo de usuário em execução para fornecer interação com a área de trabalho. O aplicativo de modo de usuário pode interagir com serviços hospedados pelo aplicativo de serviço.

    
por 17.08.2017 / 04:06
1

Um Serviço do Windows é um programa executável que deve suportar alguns eventos padrão (OnStart OnStop, OnPause, OnContinue por exemplo). Um arquivo .bat não é um executável e você nunca o executará como um serviço.

Quando você executa o arquivo bat, o programa real executado é cmd.exe - mas isso não suporta o evento necessário.

Você poderia escrever um Serviço do Windows (usando algo como C ++ ou C # ou muitos outros idiomas) e então poderia programar o serviço para executar um arquivo bat em cmd.exe. No entanto, o seu arquivo bat não funcionaria como um serviço não tem acesso à tela ou ao teclado.

TL; DR: simplesmente não vai funcionar. Talvez se você levantar outra questão sobre o que você está realmente tentando fazer? Parece que você vê um serviço como uma solução e não descreveu o problema.

    
por 16.08.2017 / 18:50