Executando um arquivo bat no XP como um serviço do windows

2

Estou usando o Windows XP e quero executar um arquivo bat específico como um serviço do Windows. Existe alguma maneira de fazer isso?

Por favor me ajude Obrigado

    
por squillman 29.06.2010 / 16:11

2 respostas

4

Você pode usar o comando sc . Por exemplo, em um prompt de comando:

sc create MyService binPath= "C:\Program Files\Windows Resource Kits\Tools\Srvany.exe" DisplayName= "My Windows Service"

Para remover:

sc delete Service

Agora, o serviço criado está usando o Srvany.exe, que faz parte do Windows Resource Kit . Isso permite que você defina um serviço com seu software que, de outra forma, não o suportaria.

Depois disso, você precisará usar o RegEdit para criar uma chave "Parâmetros" para o seu serviço em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\ . Dentro dessa chave, você desejará criar um valor de cadeia de caracteres chamado "Aplicativo" e digitar o caminho completo para o arquivo de lote que deseja executar como um serviço.

A Microsoft tem instruções para isso, além de usar um método diferente para criar o serviço inicialmente.

    
por 29.06.2010 / 16:30
2

A execução de um arquivo de lote como um serviço é um aplicativo bastante estranho, e há uma probabilidade razoável de que você tenha problemas.

Supondo que você tenha um arquivo em lote executado em um loop contínuo, suponho que você possa executar o arquivo em lote como um serviço. Como a Warner diz, você vai querer ter que usar um wrapper "service manager" (como o SRVANY que a Warner menciona, ou o livre Non -Sucking Service Manager (NSSM) ).

A descrição de Warner de criar um serviço com SC, referenciando SRVANY, está correta. Para algum conhecimento técnico: Um programa de serviço real responde às funções de controle do gerenciador de controle de serviço (SCM). Essas funções de controle permitem que o gerenciador de controle de serviço (e, portanto, o snap-in do console de gerenciamento de Serviços, etc.) pare, inicie, pause, etc., o programa de serviço. O fluxo básico é:

SCM - (invoca) - > invólucro (SRVANY, NSSM) - (invoca) - > seu programa

Se o seu arquivo em lote gerar processos adicionais quando você parar o serviço (o que realmente está parando o programa wrapper), você verá que os programas gerados pelo seu arquivo em lote não serão mortos e permanecerão indefinidamente.

O SRVANY também não monitora seu arquivo de lote (em execução no CMD.EXE) e, se o programa "morre", o "serviço" permanecerá listado como "iniciado". (O NSSM pode monitorar o CMD.EXE filho e reiniciá-lo, mas o NSSM ainda sofre com o problema de não matar processos filho do arquivo de lote na parada de serviço).

O NSSM tem uma GUI para ajudar a criar o serviço e associá-lo ao seu programa. Você pode gostar disso se não for um tipo de pessoa de linha de comando e manipulação de registros.

No geral, a execução de programas que não são de serviço em wrappers não é uma prática recomendada. Eu faço isso em alguns ambientes de produção, mas eu sempre sou cauteloso com isso e tento testar muito esses aplicativos antes de considerá-lo "funcionando".

    
por 29.06.2010 / 22:18