Fórum Serviço no Windows XP -gt; Não esta iniciando #330187

27/09/2006

0

Salve pessoal,

Estou trabalhando pela primeira vez com serviços no windows e por isso estou apanhando bastante. Eu peguei um exemplo aqui no forum compilei, instalei o serviço, iniciei o serviço ... tudo certinho sem erro algum ... Mas não esta funcionando, então vou deixar o codigo fonte do exemplo que estou montando para entender o funcionamento de serviços com Thread.

Como disse este é só um exemplo pois o que estou querendo fazer mesmo é um serviço que execute uma StoredProcedure em um banco de dados firebird 1 vez por dia ... sempre em um determinado horario.

Estou usando o delphi 7


O código:

unit uServicoGravaArquivo;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, SyncObjs;

type
  TServiceThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
end;


type
  TServicoGravaArquivo = class(TService)
  procedure ServiceContinue(Sender: TService; var Continued: Boolean);
  procedure ServicePause(Sender: TService; var Paused: Boolean);
  procedure ServiceStart(Sender: TService; var Started: Boolean);
  procedure ServiceStop(Sender: TService; var Stopped: Boolean);

  private
    { Private declarations }
    ServiceThread : TServiceThread;
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;

var
  ServicoGravaArquivo: TServicoGravaArquivo;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  ServicoGravaArquivo.Controller(CtrlCode);
end;

function TServicoGravaArquivo.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;


{ TServiceThread } 

procedure TServiceThread.Execute; 
var 
  E: TEvent; 
  ArqTXT: TextFile; 
  Arq: String;

begin

  E := TEvent.Create(nil, False, False, ´´);

  while not (Terminated) do begin 
    E.WaitFor(1000); // 1 segundo

    Arq  := ´c:\log.txt´;
    AssignFile(ArqTXT, Arq);
    Writeln( ArqTXT, timetostr(now) );
    CloseFile(ArqTXT);
  end;

  E.Free;

end;



{ TService1 }

procedure TServicoGravaArquivo.ServiceContinue(Sender: TService; var Continued: Boolean);
begin
  ServiceThread.Resume;
  Continued := True;
end;

procedure TServicoGravaArquivo.ServicePause(Sender: TService; var Paused: Boolean);
begin
  ServiceThread.Suspend;
  Paused := True;
end;

procedure TServicoGravaArquivo.ServiceStart(Sender: TService; var Started: Boolean);
begin
  ServiceThread := TServiceThread.Create(False);
  Started := True;
end;

procedure TServicoGravaArquivo.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  ServiceThread.Terminate;
  Stopped := True;
end;


end.




Mmoreira

Mmoreira

Responder

Posts

27/09/2006

Nerdex

Eu tmb tive problemas com Serviços, e notei que são verificados em laços de repetição, mesmo não ocorrendo erro algum como se fosse numa aplicação ñ Serviço.

Acredito que uma alternativa interessante para vc seria utilizar o agendamento do Windows, devido a periodicidade de execução da sua aplicação, sendo que neste contexto não seria como serviço. E só para constar, podemos até mesmo criar o agendamento via Delphi se desejar...

P.S.: Tente tirar aquele while e substitua por qq coisa e tente iniciar o serviço, só para vc ver...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar