Como criar um serviço,,,


Eu estava com uma necessidade interessante:
Como colocar um executável como serviço? sendo que esse executável é um programa em delphi que não foi projetado para ser um serviço.
Pesquisando um pouco achei uma documentação interessante:
http://support.microsoft.com/kb/137890/pt-br

Resumindo esse documento fiz o seguinte:

1º Instalei o Windows Resource Kit

2º pelo atalho do prompt criado pelo Resource Kit criei um atalho com o nome que eu queria. Ex: Instsrv.exe Nome_do_serviço “C:\Program Files\Resource Kit\Srvany.exe”

ATENÇÃO !!!
Esse Srvany.exe EXISTE, essa linha é assim mesmo, tem que criar desse jeito, esse executável deixa que você coloque qualquer aplicação para iniciar como serviço, nos próximos passos estou explicando onde você vai colocar o Executável que vai realmente iniciar o processo.

3º Após executar o passo 2 verifiquei que no registro foi criada uma entrada parecida com:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Nome_do_serviço

4º Dentro dessa chave Nome_do_Serviço, criei uma chave com o nome Parameters

5º Dentro de Parameters adicionei um registro do tipo REG_SZ com o nome Application, a sequência da chave contém o caminho do executável. Ex. C:\windows\notepad.exe

6º Fechei o Editor de Registro

7º Em Serviços já aparece o serviço que criei e é só iniciá-lo.

Simples e fácil.

Alterar tempo de Time Out para iniciar um serviço


Em alguns casos quando um serviço do Windows é iniciado manualmente ele apresenta erro de Time Out.

Por padrão, todo o serviço tem no máximo 30 segundos para iniciar, depois disso o Windows para de tentar iniciar o serviço e tenta parar o que já começou e isso pode gerar o status de Starting ou Stoping.

Para TENTAR sanar esse problema podemos executar os passos abaixo:

1. Inicie o editor do registro (Regedit.exe)

2. Localize o serviço que vamos alterar o tempo de Time Out, ex.: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSiSCSI

3. Edite ou Crie o registro ServicesPipeTimeout (se for criar ela é uma entrada DWORD)

4. Altere o valor para Decimal

5. Coloque o tempo que for necessário.

ATENÇÃO !!! o valor tem que ser em milisegundos, ex.: 60000 é igual a 60 segundos.