Service Application - Como criar uma serviço do windows que executa de tempo em tempo (sem parar) ?

Delphi

27/08/2013

Eu criei um uma Service Application. Mas estou com dificuldade com o seguinte:
- Preciso de um serviço que delete uns arquivos de tempo em tempos

Só que criando um serviço o máximo que eu consegui foi fazer uma aplicação que execute todo dia e delete os arquivos que eu quero!
Só que preciso criar uma serviço do windows que executa de tempo em tempo (sem parar), Por exemplo de 10 em 10 minutos.

Eu coloquei um TIMER no Form principal só que não está funcionando!

um exemplo de código que eu achei...

procedure TService.ServiceExecute(Sender: TService);
begin
  DeleteArquivos();
  //TimerExecuta.OnTimer(Self);     ---> linha  já to tentando tudo rs
  while not self.Terminated do        {---> Este é um código que vi na net      Mas pelo que o cara disse   era para nunca parar de rodar o serviço     Mas não ocorreu do cheio que eu achei}
    ServiceThread.ProcessRequests(True);
end;
Ewerton Rodrigues

Ewerton Rodrigues

Curtidas 0

Melhor post

Flex Ltda

Flex Ltda

27/08/2015

Olá a todos!

Obrigado https://www.devmedia.com.br/forum/perfil/valquiria-silva/365448 era isso mesmo não tinha me ligado.
GOSTEI 1

Mais Respostas

Flex Ltda

Flex Ltda

27/08/2013

Olá,

Conseguiu resolver essa situação?

Preciso de algo parecido
GOSTEI 0
Valquiria Silva

Valquiria Silva

27/08/2013

Edvilson, para a situação que o Ewerton colocou, pensaria no seguinte:

Cria o serviço,
Cria uma thread que executa sua rotina
No serviço você coloca um timer
No evento ontimer do timer você chama a thread

desta maneira o serviço quando for iniciado ativa o Timer
e quando o serviço for parado ele irá parar o Timer.


Abs.
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

27/08/2013

0- Uses shellapi

TEMPO_T: TTimer;
Execute: TButton;
Label1: TLabel;
procedure TEMPO_TTimer(Sender: TObject);
procedure ExecuteClick(Sender: TObject);
procedure FormCreate(Sender: TObject);

var
Form1: TForm1;
Directorio:string;
Comando:string;
Tempo:integer;

Procedure Remove_Arquivos;
begin
Directorio:='C:\APLIC\*.XML';
Comando:='erase /s /q /f '+Directorio;
ShellExecute(0,nil,'cmd.exe',PWideChar('/c ' + Comando),nil,0);
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
tempo:=10;
TEMPO_T.Enabled:=true;
end;


procedure TForm1.ExecuteClick(Sender: TObject);
begin
Remove_Arquivos;
Tempo:=10;
TEMPO_T.Enabled:=true;
end;


procedure TForm1.TEMPO_TTimer(Sender: TObject);
begin
Tempo:=Tempo-1;
Label1.Caption:='Faltam '+IntToStr(tempo)+', para execução da rotina';

if Tempo=0then //Se for usar minutos é só multiplicar por 60 para cada minuto
//exemplo 2 minutos= 120 >> Tempo=120
begin
TEMPO_T.enabled:=false;
Execute.Click;
end;

// Você pode por a aplicação para rodar em modo oculto
// Bloqueiar o ALT+F4.

Fiz o teste e funcionou .
Dá um retorno
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

27/08/2013

Ou simplificar com o exemplo da Valquiria
GOSTEI 0
POSTAR