Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   El servicio delphinero se cierra (https://www.clubdelphi.com/foros/showthread.php?t=28397)

[Gunman] 18-12-2005 20:40:40

El servicio delphinero se cierra
 
He hecho un servicio (mejor dicho, estoy haciendo) des de Delphi, pero nada mas lo ejecuto se cierra, porqué pasa esto? Alguien ha probado de hacer algun servicio?
Espero impaciente respuesta, muchas gracias.

dec 18-12-2005 22:44:38

Hola,

No sé si voy a saber explicarlo bien, te pido disculpas si ves que no es así, pero, vamos allá. Lo que ocurre es que un Servicio de Windows no tiene GUI, no espera, por tanto la respuesta de ningún usuario, salvo ciertos eventos que el usuario puede "mandarle" al Servicio desde el programa que proporciona Microsoft, por ejemplo.

El usuario podrá desde ese programa poner en marcha un Servicio, pausarlo, detenerlo, reanudarlo,... pero el Servicio no cuenta con interfaz alguna que mostrar al usuario, y tiene que estar haciendo "algo", realizando un determinado proceso, continuamente, hasta que se le mande detenerse, por ejemplo.

Yo no es que entienda mucho de Servicios de Windows: nunca hize ninguno si no fue copiarlo de algún libro, pero, precisamente, en los ejemplos que he podido ver los Servicios se "limitaban", por ejemplo, a estar a la escucha de un determinado puerto del ordenador.

Estar a la escucha dentro de un bucle "While" que se ejecutaba (su condición de entrada es "true") siempre, hasta que un determinado suceso indicaba que había que dar por terminado el bucle,... y por lo tanto la ejecución del Servicio de Windows.

Es decir, por terminar, la ejecución del Servicio de Windows comienza en su evento "OnStart", y a partir de ahí habrá de realizar un determinado proceso que ha de alargarse lo que se alarge la vida del propio Servicio de Windows: no es necesario que esté constantemente en ejecución, a no ser, claroe está, que esto sea necesario.

[Gunman] 18-12-2005 23:44:21

Mmmm, entiendo...
Mi servicio tiene que tener abierto el servidor IdFTPServer, como hago que se quede el servicio activo?

dec 19-12-2005 05:57:29

Hola,


Cita:

Empezado por Gunman
Mi servicio tiene que tener abierto el servidor IdFTPServer, como hago que se quede el servicio activo?

Siento no poder ayudarte: no he utilizado nunca el componente que dices. No sé cómo realiza su tarea. ¿Qué significa que el "servicio tiene que tener abierto el servidor IdFTPServer"? ¿Acaso que este tiene que estar pendiente, a la escucha, en un determinado puerto del ordenador? No sé si por ahí van los tiros. Lamento no poder decirte otra cosa, al menos de momento.

[Gunman] 19-12-2005 21:37:34

El servicio tiene que ser un servidor FTP, el servicio tiene que estar activo siempre, hasta que el usuario decida cerrarlo.

pepon386 20-12-2005 16:19:27

Cita:

Empezado por [Gunman]
El servicio tiene que ser un servidor FTP, el servicio tiene que estar activo siempre, hasta que el usuario decida cerrarlo.

El problema que tienes es debido a que, en el Execute del servicio tienes que controlar toda la vida del proceso, en tu caso, que se abra el servidor FTP, que esté a la escucha y que cuando el servidor se prepare para apagarse o el usuario detenga el servicio que finalice. Te pongo un ejemplo:

Código:

procedure TSvcMio.ServiceStart(Sender: TService;
  var Started: Boolean);
begin
  CargaConfiguracion;
  Started := True;
end;
 
procedure TSvcMio.ServiceStop(Sender: TService;
  var Stopped: Boolean);
begin
  FinalizaServicio;
  Stopped := True;
end;
 
procedure TSvcMio.ServiceExecute(Sender: TService);
begin
  AddLog('Servicio iniciado');
  while not Terminated do
        ServiceThread.ProcessRequests(True);
  AddLog('Servicio detenido' + #13#10);
end;



La franja horaria es GMT +2. Ahora son las 20:06:11.

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