PDA

Ver la Versión Completa : Como arrancar o parara un servicio en funcion de otro servicio ??


QuarkBcn
05-10-2007, 10:08:31
Hola grupo !!!

Me gustaria saber, como poder arrancar un servicio o que este se pare en función de la existencia de otro servicio.

Intento explicarme: Quiero desarrollar un servicio, que se instale al poner en marcha el sistema operativo (es decir de arranque automatico). Este servicio realizara consultas a una BD SQL SERVER, y por lo tanto para su correcto funcionamiento precisa, de tener en marcha el servicio sql. Es decir solo se puede ejecutar este servicio si sql esta activo. Y tambien quisiera que este servicio se parara si el servicio de SQL se detiene.

Espero haberme explicado !!!

Saludos a todos y gracias anticipadas por vtra ayuda !!!

Neftali [Germán.Estévez]
05-10-2007, 10:29:47
Creo que hay un sistema de definir dependencias entre servicios, de forma que al hacer uno dependiente del otro, el sistema se encargará de controlar lo que necesitas. Busca información por ahí...

mierda
05-10-2007, 16:37:03
Hola, 3 servicios, uno pa iniciar servicios, otro pa parar servicios, y otro para saber si esta corriendo un servicio.

Un saludo, espero q te sirva


function TForm1.iniciarServicio(sMachine, sService: String): Boolean;
var
schm,
schs: SC_Handle;
ss: TServiceStatus;
psTemp: PChar;
dwChkP: DWord;
begin
// ss.dwCurrentState := -1;
schm := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
if (schm>0) then
begin
schs := OpenService(schm, PChar(sService), SERVICE_START or
SERVICE_QUERY_STATUS);
if (schs>0) then
begin
psTemp := nil;
if (StartService(schs, 0, psTemp)) then
if (QueryServiceStatus(schs, ss)) then
while (SERVICE_RUNNING<>ss.dwCurrentState) do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if (not QueryServiceStatus(schs, ss)) then
Break;
if (ss.dwCheckPoint < dwChkP) then
Break;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_RUNNING=ss.dwCurrentState;
end;

function TForm1.detenerServicio(sMachine, sService: String): Boolean;
var
schm,
schs: SC_Handle;
ss: TServiceStatus;
dwChkP: DWord;
begin
schm := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
if (schm>0) then
begin
schs := OpenService(schm, PChar(sService), SERVICE_STOP or
SERVICE_QUERY_STATUS);
if (schs>0) then
begin
if (ControlService(schs, SERVICE_CONTROL_STOP, ss)) then
if (QueryServiceStatus(schs, ss)) then
while (SERVICE_STOPPED<>ss.dwCurrentState) do
begin
dwChkP := ss.dwCheckPoint;
Sleep(ss.dwWaitHint);
if (not QueryServiceStatus(schs, ss)) then
Break;
if (ss.dwCheckPoint < dwChkP) then
Break;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := SERVICE_STOPPED=ss.dwCurrentState;
end;

function TForm1.isRunning(Nombre: String): Boolean;
var
ServiceControlManager: SC_HANDLE;
Service: SC_HANDLE;
ServiceStatus: SERVICE_STATUS;
begin
Result:= FALSE;
ServiceControlManager:= OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
if ServiceControlManager <> 0 then
begin
Service:= OpenService(ServiceControlManager,PChar(Nombre),GENERIC_READ);
if Service <> 0 then
begin
if QueryServiceStatus(Service, ServiceStatus) then
Result:= ServiceStatus.dwCurrentState = SERVICE_RUNNING;
CloseServiceHandle(Service);
end;
CloseServiceHandle(ServiceControlManager);
end;
end;

QuarkBcn
09-10-2007, 09:18:19
Muchas gracias a todos por vtra ayuda !!!

Probaré el código que me has facilitado.

Saludos a todos !!!

SOAD_
24-10-2007, 23:46:41
Eso te puede ser muy util si lo personalizas a tu caso y si el servico SQL el q realiza las consultas estan en maquinas distintas...

si estan en la misma maq con una simple dependencia resuelves el problema sin mas complicacion.....

QuarkBcn
28-10-2007, 17:07:29
Y como se hace para controlar esa dependencia ??

Gracias de nuevo !!!

SOAD_
04-11-2007, 12:14:55
Pues si estas programado tu servicio en delphi, en el object inspector encontraras una property para las dependencias, es una simple lista de dependencias con los nombre de los servicios de los cual depende... pienso q te sera facil usarla.

QuarkBcn
05-11-2007, 12:01:52
Gracias de nuevo por tu ayuda !!!

Saludos !!!

lenier.perna
07-05-2011, 15:04:32
[quote=QuarkBcn;237107]
Man como puedo crear un servicio en delphi32
Me podrias mandar un tutorial mi correo es XXXXXXXX
Cualquir cosa de servico

Neftali [Germán.Estévez]
09-05-2011, 09:00:19
Man como puedo crear un servicio en delphi32
Me podrias mandar un tutorial mi correo es XXXXXXXX
Cualquir cosa de servico

Hola.
Antes de nada bienvenido a los foros.
Te reciomiendo que revises la Guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

He eliminado tu dirección de correo, porque colocándola en un mensaje de esa forma sólo conseguirás que los robots te llenen el buzón de SPAM.

Por lo demás revisa el FTP del foro (http://www.terawiki.clubdelphi.com/), donde hay bastante manuales. Si haces una búsqueda también encontrarás mucha información; Es un tema que ya se ha tratado otras veces.

lenier.perna
09-05-2011, 23:08:13
Man como puedo crear un servicio en delphi32
Me podrias mandar un tutorial mi correo es XXXXXXXX
Cualquir cosa de servico
Que alguien me ayude
Por favor ayudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Neftali [Germán.Estévez]
10-05-2011, 10:18:45
Revisa esto (http://www.clubdelphi.com/foros/showpost.php?p=399395&postcount=10) a ver si te sirve.

XcamX
15-06-2011, 14:46:11
Hola
me podrias decir que bibliotecas hay que agregar ya que me da error en esta linea por el momento


var
schm, schs: SC_Handle


desde ya muchas gracias