Asunto: Cómo hacer un servicio de Windows con Delphi
Estoy desarrollando una aplicación que requiere de un servicio de Windows que esté siempre iniciado y comprobando la existencia de un fichero en una ubicación dada cada cierto tiempo. Quiero hacerlo mediante un servicio pero no sé cómo hacerlo con Delphi ¿se puede hacer un servicio de Windows con Delphi? ¿Cómo?
Publicado:
Mar Sep 18, 2007 9:19 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Cómo hacer un servicio de Windows con Delphi
Anuncios
varios escribió:
Estoy desarrollando una aplicación que requiere de un servicio de Windows que esté siempre
...
¿Cómo?
Sí que se puede, Delphi permite crear aplicaciones de tipo "Servicio de Windows". Para ello abre Delphi y accede al menú "File" - "New" - "Other", en la ventana que aparece selecciona "Service Application". Verás que Delphi crea una aplicación "especial", con un componente TService, con propiedades exclusivas de un servicio de Windows: DisplayName, Interactive, Dependencies, AllowStop, AllowPause, ServiceType, StartType, etc.
Por supuesto, este tipo de aplicaciones, se deben inicializar de una forma un tanto especial, de no ser así la aplicación se inicia y se cierra a los pocos segundos.
Publicado:
Mie Dic 19, 2007 9:35 am
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: Re: Cómo hacer un servicio de Windows con Delphi
Anuncios
Ok, pero ¿cómo se inicializa el servicio? ¿podéis poner un ejemplo?
Publicado:
Mie Dic 19, 2007 9:43 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Cómo hacer un servicio de Windows con Delphi
Anuncios
varios escribió:
Ok, pero ¿cómo se inicializa el servicio? ¿podéis poner un ejemplo?
A continuación te mostramos un ejemplo de servicio de Windows realizado en Delphi. Este ejemplo utiliza el componente TTimer de Delphi (temporizador):
type
TAjpdSoftInventarioCliente = class(TService)
temporizador: TTimer;
procedure temporizadorTimer(Sender: TObject);
procedure ServiceExecute(Sender: TService);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
AjpdSoftInventarioCliente: TAjpdSoftInventarioCliente;
implementation
{$R *.DFM}
function leCadINI (clave, cadena : string; defecto : string) : string;
begin
with tinifile.create (changefileext(paramstr(0),'.INI')) do
try
result := readString (clave, cadena, defecto);
finally
free;
end;
end;
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
AjpdSoftInventarioCliente.Controller(CtrlCode);
end;
function TAjpdSoftInventarioCliente.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TAjpdSoftInventarioCliente.temporizadorTimer(
Sender: TObject);
var
rutaInvenClienteRed, rutaInvenClienteLocal : string;
begin
rutaInvenClienteRed :=
leCadINI('Configuración', 'Ruta inventario cliente red', '');
rutaInvenClienteLocal :=
leCadINI('Configuración', 'Ruta inventario cliente local', '');
if not DirectoryExists(
ExtractFilePath (rutaInvenClienteLocal)) then
mkdir (ExtractFilePath (rutaInvenClienteLocal));
CopyFile(pchar(rutaInvenClienteRed),
pchar(rutaInvenClienteLocal), false);
end;
procedure TAjpdSoftInventarioCliente.ServiceExecute(Sender: TService);
begin
temporizador.Enabled := true;
while not Self.Terminated do
ServiceThread.ProcessRequests(True);
end;
end.
Publicado:
Mie Dic 19, 2007 9:48 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Cómo hacer un servicio de Windows con Delphi
Anuncios
En el siguiente enlace tenéis un ejemplo que explica paso a paso cómo crear un servicio de Windows con Borland Delphi:
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A