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

27/08/2013

0

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

Responder

Post mais votado

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.

Flex Ltda

Flex Ltda
Responder

Mais Posts

26/08/2015

Flex Ltda

Olá,

Conseguiu resolver essa situação?

Preciso de algo parecido
Responder

26/08/2015

Valquiria Silva

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.
Responder

26/08/2015

Raimundo Pereira

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
Responder

26/08/2015

Raimundo Pereira

Ou simplificar com o exemplo da Valquiria
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar