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)
-   -   Trabajando con TServiceApplication (https://www.clubdelphi.com/foros/showthread.php?t=49596)

fide 25-10-2007 04:29:54

Trabajando con TServiceApplication
 
Hola. Alguien me puede ayudar acerca de como Inicio un servicio desde una aplicacion delphi?

El problema es que cuando yo creo una application de tipo TService tengo que instalarla manualmente en el services.msc de Windows mediante la ejecucion de lo siguiente:

"DireccionDelService.exe" /Install /Silent

y luego Iniciarla manualmente tambien. Lo que necesito es saber como hacer estas dos cosas desde delphi, o por favor si pueden me dan alguna referencia que no sea la ayuda del delphi para crear y gestionar servicios. Gracias por la ayuda de antemano.

aeff 25-10-2007 05:48:35

con ShellExecute puedes mandarlo a instalar, iniciar, pausar, desintalar, etc.., pero es una cosa "rustica",

¿por que no le hechas un ojo a esto?

saludos!

aeff 25-10-2007 06:24:30

mira fide, ahora me he puesto a "cacharrear" un poco y hice lo siguiente,


primero defino esto:

Código Delphi [-]
uses WinSvc;
...
const
  svName = 'MySrv';
  svDisplayName = 'Servicio de Alberto Enrique Franco Ferreiro';
...


mira, para instalar un servicio, hago esto en el onClick de un Button:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  vSCManager, vServiceCreated: Cardinal;
begin
  vSCManager := 0;
  vSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

  vServiceCreated := 0;
  vServiceCreated :=
  CreateService(vSCManager, svName, svDisplayName, SERVICE_ALL_ACCESS,
                SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
                SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, 'C:\aeff.exe', nil, nil, nil, nil, nil);


  CloseServiceHandle(vServiceCreated);
  CloseServiceHandle(vSCManager);
end;

y para desintalarlo, entonces hago lo siguiente:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  vSCManager, vService : Cardinal;
  sstatus: TServiceStatus;
begin
  vSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  vService := OpenService(vSCManager, svName, SERVICE_ALL_ACCESS);
  ControlService(vService, SERVICE_CONTROL_STOP, sstatus);
  Sleep(500);
  DeleteService(vService);
  CloseServiceHandle(vService);
  CloseServiceHandle(vSCManager);
  RaiseLastWin32Error;
end;

espero que te sirva de algo

saludos, aeff!

aeff 25-10-2007 06:30:01

ahhh! no he probado aun, pienso que sea así:

mira, para paralo, continuar, pausarlo, etc.. puedes hacer esto:

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  vSCManager, vService : Cardinal;
  sstatus: TServiceStatus;
begin
  vSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  vService := OpenService(vSCManager, svName, SERVICE_ALL_ACCESS);
  ControlService(vService, SERVICE_CONTROL_STOP, sstatus);  CloseServiceHandle(vService);
  CloseServiceHandle(vSCManager);
end;

en la linea roja, la funcion ControlService, en el segundo parámtro puedes usar lo siguiente, segun lo que quieras hacer

Cita:

SERVICE_CONTROL_STOP
SERVICE_CONTROL_PAUSE
SERVICE_CONTROL_CONTINUE
SERVICE_CONTROL_INTERROGATE
SERVICE_CONTROL_SHUTDOWN

ahora, para iniciarlo nuevamente, prueba con la función *StartService(...)*, y si te quedas con dudas o no entiendes, entonces "tira pa' acá", que aqui hay un equipo que de seguro te ayudará

saludos!

fide 25-10-2007 17:34:19

Delphi y TService
 
Oye albertico, yo lo entendi todo y esta ok. Gracias por la ayuda. Ha una duda...

en uno de los codigos que publicaste esta la instruccion

Código Delphi [-]
CreateService(vSCManager, svName, svDisplayName, SERVICE_ALL_ACCESS,
                SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
                SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, 'C:\aeff.exe', nil, nil, nil, nil, nil);

Eso que tu instalas, el decir el aeff.exe tiene que ser un tservice creado en delphi verdad?

Solo eso es lo que me tiene con dudas!

fide 10-02-2008 19:59:43

Cita:

Empezado por fide (Mensaje 241118)
Oye albertico, yo lo entendi todo y esta ok. Gracias por la ayuda. Ha una duda...

en uno de los codigos que publicaste esta la instruccion

Código Delphi [-]
CreateService(vSCManager, svName, svDisplayName, SERVICE_ALL_ACCESS,
                SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
                SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, 'C:\aeff.exe', nil, nil, nil, nil, nil);

Eso que tu instalas, el decir el aeff.exe tiene que ser un tservice creado en delphi verdad?

Solo eso es lo que me tiene con dudas!

Por favor que alguien me diga por que esto no quiere funcionar...


La franja horaria es GMT +2. Ahora son las 10:02:32.

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