Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Como arrancar o parara un servicio en funcion de otro servicio ?? (https://www.clubdelphi.com/foros/showthread.php?t=48843)

QuarkBcn 05-10-2007 10:08:31

Como arrancar o parara un servicio en funcion de otro servicio ??
 
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

Aun asi, desde delphi ...
 
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

Código Delphi [-]
 
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

Interesante Codigo
 
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

control de las dependencias
 
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

Man
 
[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

Cita:

Empezado por lenier.perna (Mensaje 399284)
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.

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, 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 a ver si te sirve.

XcamX 15-06-2011 14:46:11

bibliotecas
 
Hola
me podrias decir que bibliotecas hay que agregar ya que me da error en esta linea por el momento

Código Delphi [-]
 
var
schm, schs: SC_Handle

desde ya muchas gracias


La franja horaria es GMT +2. Ahora son las 21:08:56.

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