PDA

Ver la Versión Completa : Programa SERVICIO WINDOWS


marceloalegre
29-04-2005, 13:22:57
Buenos dias:
En esta ocasion, les molesto para saber si alguien conoce como hacer que mi programa sea un servicio (como los que estan en services .msc de windows, de los que se pueden poner automatico, manual, detenido...)

y ademas alguien sabe como protegerlo de que no lo puedan matar a mi programa? Algo como Ej:
Si quiero matar el proceso svchost.exe me dice: "la operacion no se puede termina, acceso denegado" (lo pueden ver en ej: xp y 2000)
o no se.. alguna otra forma de que no puedan matar el proceso de mi programa, desde ya gracias a todos!

hermes_32
29-04-2005, 14:29:53
Para que tu aplicacion sea un servicio inicia un nuevo proyecto asi:

File -> New -> Other -> Service Application

Este será el aspecto:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;

type
TService1 = class(TService)
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

end.



Ahora tienes que implementar tú los métodos:


procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);


Me imagino que querrás que realice cada cierto tiempo una acción. Pues no puedes poner un Timer así por las buenas. Debes crearlo:


.
.
.
private
{ Private declarations }
Timer: TTimer;
.
.
.


Y al comenzar el servicio:


procedure ServiceStart(Sender: TService; var Started: Boolean);
begin
Timer:=TTimer.Create(nil);
Timer.Interval := Intervalo;
Timer.OnTimer:=TimerOnTimer; //aquí la acción
end;


Y al terminar el servicio:


procedure ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Timer.Free;
Timer:=nil;
end;


Bueno esto es mas o menos el trabajo. Espero que te ayude.

delphi.com.ar
29-04-2005, 14:32:11
Te recomiendo investigar la clase TService, que fue creada para este motivo. En pocos paso: File\New\Other\Application Service y ya tienes un servicio!

Saludos!

marceloalegre
29-04-2005, 20:13:45
Excelente :) mi servicio funciona de maravillas GRACIAS A TODOS!

JXJ
10-11-2005, 19:26:45
tenog unas dudas.

¿para que sirven los servicios?

¿cuales son sus usos?

por que se que el apache y el mysql se pueden instalar
como servicios.

no encuentro para que usar servicios. ni en que usarlos
que no sea en programas como los arriba mencionados

¿en que han usado servicios,?

marceloalegre
10-11-2005, 19:57:26
Podes aprovechar para usarlos cuando queres que se cargue algo sin importar en que sesion estes parado, o sea antes de que pongas user y pass cuando inicias la pc por ejemplo en un windows 2000 hacer que la maquina ejecute un programa que haga algo que te interese hacer en esta instancia...

Por ejemplo no se un servicio para usar de antivirus, emm escuchar en algun puerto determinado y +++

djemix
13-02-2008, 08:52:51
Todo esto me parece super interesante, pero mi problema no es un servicio que haga cosas cada cierto tiempo, sino que yo desde mi aplicación windows pueda interactuar con el.

¿Como me puedo comunicar con el servicio? En plan que le pregunte algo y me responda con otra cosa.

Espero que me podais ayudar!! Grasiassssssss