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)
-   -   No me crea el SERVICIO (https://www.clubdelphi.com/foros/showthread.php?t=52045)

MON___ 08-01-2008 20:53:11

No me crea el SERVICIO
 
¿Alguien me puede explicar dónde está el error en esta función? En ella compruebo la existencia de un servicio y si no existe intento crearlo (¡y aquí está el error!)
Código Delphi [-]
function CrearServicioApache : boolean;
  var
    ServicioControl : SC_Handle;
    Servicio : SC_Handle;
    Path     : string;
begin
  Result := False;
  ServicioControl := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
  if ServicioControl <> 0 then
  begin
    Servicio := OpenService(ServicioControl, 'Apache 2', SERVICE_ALL_ACCESS);
    if Servicio <> 0 then  
      CloseServiceHandle(Servicio)
    else  //no existe el servicio e intento crearlo
    begin
      path := '"c:\apache\apache2\bin\apache.exe" -k runservice';
      Servicio := CreateService(ServicioControl,
                               'Apache 2', 'Servidor Apache',
                               SC_MANAGER_ALL_ACCESS or SC_MANAGER_CREATE_SERVICE,
                               SERVICE_WIN32_OWN_PROCESS,
                               SERVICE_DEMAND_START,
                               SERVICE_ERROR_IGNORE,
                               PChar(Path), nil, nil, nil, nil, nil);
      if Servicio <> 0 then
      begin
        Result := True;
        CloseServiceHandle(Servicio);
      end;
    end;
    CloseServiceHandle(ServicioControl);
  end;
end;

Postdata: Sistema operativo WINDOWS XP

cHackAll 09-01-2008 01:13:26

Solo tengo una duda; si quieres instalar el servicio del apache; por que no ejecutas;

Código:

c:\apache\apache2\bin\apache.exe -k install -n Apache2.x

jachguate 09-01-2008 02:39:54

Hola MON__

Edité tu mensaje para cambiar la etiqueta code por la etiqueta delphi

Como ves, el resultado queda mucho mejor.

Hasta luego.

;)

MON___ 09-01-2008 12:27:11

Gracias, Jachguate. Efectivamente, ¡queda mucho mejor!
ChackAll, tienes razón y en eso había pensado; no obstante es la primera vez que me he encontrado con la creación de un servicio y no lo logro. Por más que reviso los argumentos dados en CreateService no encuentro el error. Digamos que en este punto el que sea APACHE es secundario. Ahora me preocupa sólo saber dónde cometo el error.

Por cierto: lo que estaba intentando era instalar el Apache (con PHP y MySQL) en una memoria Flash; al introducirla en un portátil (que no lo tiene instalado) lanzase una aplicación DELPHI que comprobase la existencia del servicio y, de no existir, lo crease.

¡Gracias a los dos! ¡Feliz año!

cHackAll 09-01-2008 19:23:22

Cita:

Empezado por MON___ (Mensaje 256893)
Gracias, Jachguate. Efectivamente, ¡queda mucho mejor!
ChackAll, tienes razón y en eso había pensado; no obstante es la primera vez que me he encontrado con la creación de un servicio y no lo logro. Por más que reviso los argumentos dados en CreateService no encuentro el error. Digamos que en este punto el que sea APACHE es secundario. Ahora me preocupa sólo saber dónde cometo el error.

Por cierto: lo que estaba intentando era instalar el Apache (con PHP y MySQL) en una memoria Flash; al introducirla en un portátil (que no lo tiene instalado) lanzase una aplicación DELPHI que comprobase la existencia del servicio y, de no existir, lo crease.

¡Gracias a los dos! ¡Feliz año!

Ok. el problema es simple; estas creando la conexión con el Administrador de servicios con el parametro SC_MANAGER_CONNECT, osea solo estas estableciendo una conexión con el mismo; pero no estas habiitando la opción de creación de servicios, utiliza:

Código Delphi [-]
 ServicioControl := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

En el caso anterior estas habilitando la siguiente conbinación
Código Delphi [-]
STANDARD_RIGHTS_REQUIRED or 
SC_MANAGER_CONNECT or 
SC_MANAGER_CREATE_SERVICE or 
SC_MANAGER_ENUMERATE_SERVICE or 
SC_MANAGER_LOCK or 
SC_MANAGER_QUERY_LOCK_STATUS or 
SC_MANAGER_MODIFY_BOOT_CONFIG

Tambien hay un error en la constante de acceso en la creación del servicio, utiliza esto:

Código Delphi [-]
...
 
Servicio := CreateService(ServicioControl, 'Apache 2', 'Servidor Apache', SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
 
...

Saludos

Edito, y re-edito: había otro error :p

MON___ 09-01-2008 20:26:38

:):):) ¡Por fin! ¡Duda resuelta! ¡Gracias, cHackAll!


La franja horaria es GMT +2. Ahora son las 07:18:13.

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