Serviço no Windows XP -gt; Não esta iniciando
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:
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
Curtidas 0
Respostas
Nerdex
27/09/2006
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...
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...
GOSTEI 0