Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Sistemas operativos > Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2008
AXONIDS AXONIDS is offline
Miembro
 
Registrado: abr 2008
Posts: 10
Poder: 0
AXONIDS Va por buen camino
Comunicación TCP/IP con otra maquina.

La aplicación funciona correctamente, y si la pongo en el registro arranca de forma correcta junto con la sesión que se inicie en windows.
Pero como servicio no he podido hacer que arranque.
Aunque en el registro se incluye bien la entrada y la ruta es la correcta a mi aplicación, luego no arranca, (más bien intenta arrancar y se para).

Gracias
Responder Con Cita
  #2  
Antiguo 22-04-2008
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.084
Poder: 18
juanelo Va por buen camino
Cita:
Empezado por AXONIDS Ver Mensaje
Aunque en el registro se incluye bien la entrada y la ruta es la correcta a mi aplicación, luego no arranca, (más bien intenta arrancar y se para).
Esta parte no la entiendo.
Responder Con Cita
  #3  
Antiguo 22-04-2008
AXONIDS AXONIDS is offline
Miembro
 
Registrado: abr 2008
Posts: 10
Poder: 0
AXONIDS Va por buen camino
Perdón, quería decir que se incluye entre los servicios de windows, no en el registro de windows.
Responder Con Cita
  #4  
Antiguo 22-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 24
BlueSteel Va por buen camino
Cool

Cita:
Empezado por AXONIDS Ver Mensaje
Comunicación TCP/IP con otra maquina.

La aplicación funciona correctamente, y si la pongo en el registro arranca de forma correcta junto con la sesión que se inicie en windows.
Hola

solo por preguntar... dices que trabaja con comunicación TCP/IP.. el Pc donde arranca el sistema tiene Dirección IP Fija o es asignada por un DHCP ???

Quizas por eso te puede dar problema... quieres correr la aplicación antes de que tome una Dirección IP

bueno, eso veeria yo antes... (puede que no sea pero...no se me ocurre otra cosa)

Salu2
__________________
BlueSteel
Responder Con Cita
  #5  
Antiguo 22-04-2008
AXONIDS AXONIDS is offline
Miembro
 
Registrado: abr 2008
Posts: 10
Poder: 0
AXONIDS Va por buen camino
La IP está asignada de forma manual.
El caso es que en el otro equipo aparece como que se conecta para iniciar la comunicación pero a los pocos segundos se desconecta.

Incluso si intento iniciar el servicio de forma manual se detiene pasados unos segundos también.

Un saludo.
Responder Con Cita
  #6  
Antiguo 22-04-2008
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.084
Poder: 18
juanelo Va por buen camino
Puedes poner el codigo de lo que haces en el start del servicio. Otra pregunta, este servicio funciona como Cliente o como servidor (que componentes usas para la comunicacion?)
Responder Con Cita
  #7  
Antiguo 22-04-2008
AXONIDS AXONIDS is offline
Miembro
 
Registrado: abr 2008
Posts: 10
Poder: 0
AXONIDS Va por buen camino
La aplicación funcina correctamente si se ejecuta bajo windows de forma normal.
Funciona también bien si se pone en el registro de windows para que arranque junto con windows, pero en este caso se inicia cuando se inicia una sesión y no antes.

Falla cuando la tengo como servicio de windows tanto al arrancar el equipo como cuando intento de forma manual iniciarlo yo, obteniendo del error "1053 El servicio no ha respondido a la petición o inicio del control en un tiempo adecuado."
El caso es que la aplicación (que hace de cliente) SÍ arranca y parece que comienza a comunicarse con la otra aplicación que tengo en otro equipo que hace de aplicación servidor, pero al poco cesa y se apaga.

Que hago mal?. He intentado crear otra aplicación completamente nueva que lo unico que haga es ejecutar la otra, a ver si colaba, pero sin exito.

¿Qué puedo hacer para que el servicio se mantenga activo?

Creación del servicio:
Código Delphi [-]
procedure TMainForm.CrearServicio();
var   
  servicio: TServicio; 
begin   
  servicio := TServicio.Create('miAplicacionCliente');
  if not servicio.EstaInstalado() then servicio.Instalar(Application.Exename);
  servicio.Free;
end;

Función INICIAR:
Código Delphi [-]
function TServicio.Iniciar(): boolean;
var
  i: integer;
  argv, p: ^PChar;
  hServicio, hManejador: cardinal;
begin
  argv := nil;
  result := false;
  hManejador := self.AbrirManejador();
  if (hManejador <> 0) then
  begin
    try
      hServicio := self.AbrirServicio();
      if (hServicio <> 0) then
      begin
        if (FArgumentos.Count > 0) then begin
          GetMem(argv, FArgumentos.Count * Sizeof(PChar));
          p := argv;
          for i := 0 to FArgumentos.Count-1 do
          begin
            p^:= PChar(FArgumentos[i]);
            Inc(p);
          end;
        end;
        Result := StartService(hServicio,
         FArgumentos.Count, argv^);
        if (hServicio <> 0) then
          CloseServiceHandle(hServicio);
      end;
    finally
      if (hManejador <> 0) then
        CloseServiceHandle(hManejador);
    end;
  end;
end;

Función INSTALAR:
Código Delphi [-]
function TServicio.Instalar(ejecutable: string): boolean;
var
  hServicio, hManejador: cardinal;
begin
  FEjecutable := ejecutable;
  
  if not FileExists(FEjecutable) then
    raise EIOErrorServicio.Create(rsErrorSinEjecutable);
  if not self.ValidarNombre() then
    raise EIOErrorServicio.Create(rsErrorNombreInvalido);
  if (Length(Trim(FDescripcion)) > 256) then
    raise EIOErrorServicio.Create(rsErrorDescripcionInvalida);

  hServicio := 0;
  result := false;
  hManejador := self.AbrirManejador(SC_MANAGER_CREATE_SERVICE);
  if (hManejador <> 0) then begin
    try
      hServicio := CreateService(hManejador, Pchar(FNombre), Pchar(FDescripcion),
                    SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
                    ////SERVICE_DEMAND_START,
                    SERVICE_AUTO_START,
                    SERVICE_ERROR_NORMAL, PChar(FEjecutable), nil, nil, nil, nil, nil);
      result := (hServicio <> 0);
    finally
      if (hServicio <> 0) then
        CloseServiceHandle(hServicio);
      if (hManejador <> 0) then
        CloseServiceHandle(hManejador);
    end;
  end;
end;

Última edición por AXONIDS fecha: 22-04-2008 a las 17:35:36.
Responder Con Cita
  #8  
Antiguo 22-04-2008
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.084
Poder: 18
juanelo Va por buen camino
Sobre que sistema operativo trabajas?, intenta dandole al servicio informacion de sesion, es decir, asignale un usuario que tenga derechos por ejemplo s de adminitrador, esto se hace en la pestaña "iniciar sesion" de las propiedades del servicio.
Que componentes usas para comunicarte, indy?
Responder Con Cita
  #9  
Antiguo 22-04-2008
AXONIDS AXONIDS is offline
Miembro
 
Registrado: abr 2008
Posts: 10
Poder: 0
AXONIDS Va por buen camino
Uso WINDOWS XP, la cuenta en la que estoy es de administrador pero no tiene contraseña y no puedo poner lo que me has dicho de "iniciar como:"

El caso es que arrancar... arranca pero se para y me sale:
"1053 El servicio no ha respondido a la petición o inicio del control en un tiempo adecuado."

Es como si windows "matara" el proceso .... ¿no?

El motivo por el que quiero que se arranque antes de iniciar sesión es para si no se inicia ninguna sesión, la aplicación ya pueda estar marchando.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TrayIcon en un servicio windows adrall API de Windows 2 19-03-2008 00:40:54
Programa SERVICIO WINDOWS marceloalegre Varios 6 13-02-2008 08:52:51
Instalar un servicio de Windows maikeloh API de Windows 1 24-02-2007 15:19:42
Servicio de Windows... Ariel46 Windows 2 05-04-2006 20:49:51
Interactuar Con Servicio de Windows Enan0 API de Windows 4 27-01-2006 17:31:38


La franja horaria es GMT +2. Ahora son las 14:36:33.


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
Copyright 1996-2007 Club Delphi