Como criar um serviço executando um arquivo .bat no Windows 2008 Server?

21

Eu criei o serviço usando

sc create myService binpath=myservice.bat

Mas quando inicio, ele falha com a seguinte mensagem de erro:

[SC] StartService FAILED 1053:
    The service did not respond to the start or control request in a timely fashion.

No Win2k3, usei o srvany.exe no kit de recursos, mas não há kit de recursos para o win2k8. Por enquanto, instalei o srvany.exe na minha máquina, mas não acho que seja a melhor maneira de fazê-lo.

Obrigado!

abyx
fonte
1
Você pode executar um arquivo em lotes como um serviço? Uma tarefa agendada não seria melhor? Sei que, se você usa um serviço real do Windows, o evento OnLoad precisa retornar em alguns segundos.
Tsilb

Respostas:

9

Claro que você não pode executar um serviço como esse. Você tentou usar o srvany no servidor 2008? Até onde eu sei, não existe uma versão 'oficial' do srvany para o s2k8, mas você sempre pode tentar, não é?

EDIT: Ah, eu esqueci! Também usamos o FireDaemon para executar aplicativos que não são de serviço como serviços. No entanto, não é gratuito e sua funcionalidade é um pouco demais para as suas necessidades.

shylent
fonte
Foi o que escrevi que fiz.
Abyx
hmm .. isso é estranho. Apenas filtrou através do meu cérebro. Desculpe. De qualquer maneira, srvany parece ser a melhor coisa a se fazer nessa situação.
shylent
O srvany funciona em 2008 (eu o uso para instalar e executar o Winamp.exe como um serviço em um servidor doméstico) ... mas você não pode executar apenas um arquivo bat.
Oskar Duveborn
24

Use o NSSM para executar um arquivo .BAT ou qualquer arquivo .exe antigo como um serviço. É quase um substituto para o SRVANY e é um aplicativo sem frescura e sem complicações.

http://iain.cx/src/nssm/

Eu tive o mesmo problema que você e o NSSM foi o único utilitário que funcionou.

Matthew Blackford
fonte
3
Eu nunca tinha ouvido falar disso antes, mas parece ser uma ferramenta valiosa. Obrigado pela dica.
Skyhawk
Obrigado, funcionou para mim. Embora ainda esteja procurando opções para interromper o serviço em um horário especificado.
Ankit
8

Usamos o Agendador de tarefas para executar tarefas sempre que o computador é iniciado (independentemente de um usuário estar conectado ou não)

Korayem
fonte
1
Para ocultar a janela ler este ou esta se você não está feliz que funciona como sistema
JonnyRaa
7

Você não pode simplesmente executar um arquivo .BAT ou qualquer arquivo .exe antigo como um serviço. Os serviços do Windows não funcionam com você. Você pode usar um utilitário como o NSSM ( não-Sucking Service Manager ) ou o utilitário SRVANY não-livre da Microsoft para executar um programa arbitrário como um serviço, mas talvez descubra que não possui um comportamento de parada muito "gracioso".

Evan Anderson
fonte
3

O comando SC apenas adiciona as entradas de registro necessárias para um serviço - se o arquivo que você especificar não for um serviço válido, ele não o transformará em um.

Whisk
fonte
2

de: esta publicação nos fóruns da technet: http://social.technet.microsoft.com/Forums/en-US/winserverMigration/thread/98a97aee-c62b-4683-94ab-3777899cf7de/

Aqui está o que fazer ...

No momento desta publicação, não havia Ferramentas do Windows Server 2008 Resource Kit, portanto, obtenha o "srvany.exe" das "Ferramentas do Windows Server 2003 Resource Kit" e copie-o para um local adequado no servidor Win2008 (por exemplo, C: \ Windows \ System32 \). Use "sc" para criar um novo serviço que inicie "srvany" (por exemplo, sc crie MyService binPath = C: \ Windows \ System32 \ srvany.exe DisplayName = "Meu serviço personalizado") Usando RegEdit: crie uma chave "Parâmetros" para o seu serviço (por exemplo, HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ MyService \ Paramaters \) Usando RegEdit: na recém-criada chave "Parameters", crie um valor de string chamado "Application" e digite o caminho completo para o aplicativo que você deseja executar como um serviço. (Não são necessárias cotações.)

E isso deveria bastar.

Nota: alguns aplicativos armazenam suas configurações em uma seção do usuário, não em HKEY_LOCAL_MACHINE, portanto, você precisará executar o aplicativo para configurá-lo e, em seguida, configurar o serviço para executar como esse usuário.

user1977194
fonte
2

tente isso ... funcionou para mim ..

sc create ServiceTest binpath= "C:\Windows\System32\cmd.exe /C C:\ServiceTest\Jenkins-Slave.bat"
Kushal Gangan
fonte
Não funcionou para mim também! Mesmo erro do OP - Não foi iniciado em tempo hábil.
Ravindra HV
Idem - não funcionou.
Spedge
0

Eu tropecei nessa coisa. Aqui está a ferramenta chamada Bat_To_Exe_Converter. É muito fácil converter arquivos .bat para arquivos .exe. Tente. Baixe o downloader primeiro e ele fará o download do Bat_To_Exe_Converter automaticamente. Realmente me ajudou a criar um serviço que executa meu arquivo .bat através de .exe. http://download.cnet.com/Bat-To-Exe-Converter/3001-2069_4-10555897.html?spi=eae5ab48292cc101b5f0ec370cf99ad0

Ilya
fonte
Bem-vindo à falha do servidor! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Scott pacote de
0

Encontrei duas outras opções que não levarão você à sua carteira.

Você pode sciniciar o srvanyque aponta para o seu programa. (há uma postagem no fórum que não consigo vincular porque não tenho representante suficiente aqui, embora possua no StackOverflow - grumble)

Aqui estão as etapas que o pôster original usou:

  1. Use scpara criar um novo serviço que é iniciado srvany(por exemplo sc create MyService binPath=C:\Windows\System32\srvany.exe DisplayName="My Custom Service")
  2. Usando o RegEdit: crie uma Parameterschave para o seu serviço (por exemplo HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\)
  3. Usando RegEdit: na Parameterschave recém-criada , crie um valor de sequência chamado Applicatione insira o caminho completo para o aplicativo que você deseja executar como serviço. (Não são necessárias cotações.)

Se isso parecer um hack , você poderá criar um serviço .NET para iniciar seu processo. Se você quiser pular algumas etapas, aqui está um serviço .NET de código aberto que pode iniciar processos genéricos:

http://www.codeproject.com/KB/system/xyntservice.aspx

Ajuste-o às suas necessidades, mas ele fará a maior parte do que você deseja fora da caixa.

databyte
fonte
E é o srvany que você mencionou, o do Win2k3 que não possui versão suportada para o Win2k8?
LarsH 27/10