Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Generar línea {$R *.TLB} (https://www.clubdelphi.com/foros/showthread.php?t=91856)

EagleKingson 19-05-2017 20:04:25

Generar línea {$R *.TLB}
 
Hola a todos. Tengo una duda respecto aun servicio de windows que estoy desarrollando en Delphi.

Generé mi servicio y para probar con el debug, todas mis funciones las mandaba a llamar desde el OnCreate, con eso no tengo problema, hace todo perfectamente, pero al momento de pasar mis funciones al evento OnExecute para ya poder instalar el servicio, este no se puede iniciarm ya que me manda el error de "El servicio xx en Equipo Local se inicio y después se detuvo. Algunos servicios se detienen automáticamente si no son usados por ningún servicio o programa".

Este es mi código en el OnCreate:

Código Delphi [-]
procedure TGLOCEDI01.ServiceExecute(Sender: TService);
var
  IntervaloConexion : String;
begin
  EscribeLog(formatDateTime('yyyymmdd hh:mm:ss', now)  + 'Iniciando Servicio...',
                       GetCurrentDir + '\Log\Log'+ FormatDatetime('yyyymmdd',now)+'.txt');

  InicializaVariables();
  RealizaConexion();                       
  IntervaloConexion := ExtraDatoTablaGen(127,3);
  if IntervaloConexion = '' then
    IntervaloConexion := '30000';

  EscribeLog(formatDateTime('yyyymmdd hh:mm:ss', now)  + 'Activa Timer - Intervalo Conexión: ' + IntervaloConexion,
                       GetCurrentDir + '\Log\Log'+ FormatDatetime('yyyymmdd',now)+'.txt');      
  Timer1.Interval := StrToInt(IntervaloConexion);
  Timer1.Enabled := True;

  while not Terminated do
  begin
    ServiceThread.ProcessRequests(True); //wait for termination;
    Timer1.Enabled := False;
  end;
end;

En cuanto al título de mi pergunta, para hacer este servicio me basé en otro que me pasaron, al parecer hice exactamente lo mismo pero no funciona (lamentablemente la persona que lo hizo ya no se encuentra por aquí). De lo que me percaté es que existe esta línea que tiene el servicio que me pasaron y que mi aplicación no la genera (según yo, debería generarse automáticamente):

Código Delphi [-]
{$R *.TLB}

No sé si esa sea la razón de que mi servicio no se inicie correctamente, pero no sé cómo hacer para que se genere esa línea.

ACTUALIZACIÓN: Olvidé mencionar que trabajo con D5 y la línea se genera en el archivo .dpr donde se declaran todas la unidades.

Espero y me puedan echar una mano y les agradezco.

mallenat 22-05-2017 10:57:32

Hola, el problema lo tienes en el bucle principal:
Código Delphi [-]
while not Terminated do
begin
    ServiceThread.ProcessRequests(True); //wait for termination;
    Timer1.Enabled := False;
end;

Procesas lo que hay pendiente y paras el timer, con lo que el timer no llega a ejecutarse. Debes parar el timer fuera del bucle y controlar la terminación del servicio desde la ejecución del Timer
Código Delphi [-]
while not Terminated do
begin
    ServiceThread.ProcessRequests(True); //wait for termination;
end;
Timer1.Enabled := False;

Tienes un ejemplo aqui: http://www.clubdelphi.com/foros/show...31&postcount=6


La franja horaria es GMT +2. Ahora son las 22:10:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi