Fórum Serviço não responde a requisição em tempo hábil #584830
14/08/2017
0
Olá, eu sou junior em delphi, estou tentando fazer meu primeiro service application e estou tendo dificuldades. Criei o projeto como Service Application, e o que eu preciso é basicamente gravar informações lidas de uma máquina que mede dados de um tanque de combustível. A comunicação com o aparelho não importa agora, mas sim o Serviço, ele precisa ter um Timer que faça a leitura dos dados e a gravação no banco de dados.
O problema é: Meu serviço não passa do evento OnCreate, os eventos OnStart e OnExecute não são ativados quando o Appplication.Run é executado no projeto. Abaixo seguem as procedures:
procedure TA.ServiceCreate(Sender: TObject);
begin
Showmessage('Serviço criado, timer será disparado');
Timer1.Enabled := True;
end;
procedure TA.ServiceExecute(Sender: TService);
begin
ShowMessage('Serviço em operação, medição irá começar');
medir();
while not self.Terminated do
ServiceThread.ProcessRequests(true);
end;
procedure TA.ServicePause(Sender: TService; var Paused: Boolean);
begin
Timer1.Enabled := False;
end;
procedure TA.ServiceStart(Sender: TService; var Started: Boolean);
begin
Showmessage('Serviço iniciadio');
end;
procedure TA.Timer1Timer(Sender: TObject);
begin
Medir();
end;
Ok me perdoem pelo nome "A" para o projeto. Quando eu dou project.exe /install a aplicação é instalada mas o serviço fica como "Interrompido" no gerenciador do Windows, e quando eu tento iniciar ele aparece a mensagem "O serviço não respondeu a requisição de controle em tempo hábil"
Alguém pode me dizer o que estou fazendo de errado?
O problema é: Meu serviço não passa do evento OnCreate, os eventos OnStart e OnExecute não são ativados quando o Appplication.Run é executado no projeto. Abaixo seguem as procedures:
procedure TA.ServiceCreate(Sender: TObject);
begin
Showmessage('Serviço criado, timer será disparado');
Timer1.Enabled := True;
end;
procedure TA.ServiceExecute(Sender: TService);
begin
ShowMessage('Serviço em operação, medição irá começar');
medir();
while not self.Terminated do
ServiceThread.ProcessRequests(true);
end;
procedure TA.ServicePause(Sender: TService; var Paused: Boolean);
begin
Timer1.Enabled := False;
end;
procedure TA.ServiceStart(Sender: TService; var Started: Boolean);
begin
Showmessage('Serviço iniciadio');
end;
procedure TA.Timer1Timer(Sender: TObject);
begin
Medir();
end;
Ok me perdoem pelo nome "A" para o projeto. Quando eu dou project.exe /install a aplicação é instalada mas o serviço fica como "Interrompido" no gerenciador do Windows, e quando eu tento iniciar ele aparece a mensagem "O serviço não respondeu a requisição de controle em tempo hábil"
Alguém pode me dizer o que estou fazendo de errado?
Guilherme
Curtir tópico
+ 0
Responder
Posts
14/08/2017
Gutierry Pereira
Boa noite,
1 - Serviços não devem fazer operações graficas, isso necessita de permissão e em geral da problemas. Remova os showMessage e se precisar logar faça isso escrevendo em um arquivo de log.
2 - Tente executar o serviço sem a thread. possa ser que sua thread esteja dando algum problema.
3 - Faça o Mesmo com o timer.
1 - Serviços não devem fazer operações graficas, isso necessita de permissão e em geral da problemas. Remova os showMessage e se precisar logar faça isso escrevendo em um arquivo de log.
2 - Tente executar o serviço sem a thread. possa ser que sua thread esteja dando algum problema.
3 - Faça o Mesmo com o timer.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)