terça-feira, 22 de junho de 2010

Retornando um código de erro na inicialização do serviço

Muitas vezes, um serviço do Windows, para subir, precisa de algumas condições como acesso a um banco de dados ou uma conexão socket.

Acontece que muitas vezes um serviço não sobe e você simplesmente fica sem saber o que aconteceu.

Exemplo:

procedure TcsBlendedServerService.ServiceStart(Sender: TService;
  var Started: Boolean);
var
bRet : Boolean;
begin
  try
    try
      bRet := dmNucleo.StartServer;
      Started := bRet;
    except
      on E: Exception do
      begin
        Started := False;
        Self.GerarLog(DescreverException(E),4938403,ctLOGException,rlCritical);
      end;
    end;
  finally

  end;
end;

Caso o serviço não suba, retorna a seguinte tela de erro:


Para melhorar esta situação, a classe TService oferece o ErrCode, veja o exemplo:


procedure TcsBlendedServerService.ServiceStart(Sender: TService;
  var Started: Boolean);
var
bRet : Boolean;
begin
  try
    try
      bRet := dmNucleo.StartServer;
      Started := bRet;

      //Retorno de um código numérico
      if not (Started) then
        Self.ErrCode := 10;
      //---

    except
      on E: Exception do
      begin
        Started := False;
        Self.GerarLog(DescreverException(E),4938403,ctLOGException,rlCritical);
      end;
    end;
  finally

  end;
end;

Neste caso aparece a tela abaixo:



Não é lá essas coisas mas ajuda.

Minha lista de blogs