Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-11-2004
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Unhappy Ayuda !!!! Service Application

Estoy intentando hace un servicio (sobre Windows 2000), el cual solo tiene un timer y lo que hace es a determinado dio compacta una base de datos, Pero por algun motivo este al cabo de unos 15 seg. Aprox, se detiene.. alguien sabe que es lo que puede pasar.. probe el codigo y funciona bien, le hice depurandolo y anda bien... solo que tambien se cierra a los 15 seg.

Tambien he probado con una aplicacion de sercivio que solo tengo un timer y que cada 10 seg haga beep. y bueno lo hace una sola vez y luego se cierra alguna idea de a que le estoy errando???
Responder Con Cita
  #2  
Antiguo 12-11-2004
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Puedes postear algo del codigo? Es muy vago lo que mencionas.

Ademas, chequea que POR NADA del mundo se muestre ventanas del usuario, y que los errores no ejecuten Messageboxs ni nada por el estilo....
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 12-11-2004
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
nooo nada de ventanas ni nada es un servicio!
ahora voy intentar postear el codigo yso delphi 6, ha otra cosa como se hace para instalarlo?
Bueno todo el codigo completo!!!! yo creo que no tiene ningun error. porque lo probe bajandole el tiempo al timer y funciona todo ok!! pero a ese tiempo se cierra!!!
una PERSONA DEL FORO me hizo unas modificaciones y el de el funciona.. todabia no lo he visto.. pero quiero saber mi error.. y despues como hago apara instalarlo!! saludos

Código:
 
 
 unit CompactRep;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
   ExtCtrls,zip, registry, JRO_TLB;
 
 type
   TCompactarYreparar = class(TService)
 	TimerSql: TTimer;
 	procedure TimerSqlTimer(Sender: TObject);
 	procedure ServiceBeforeInstall(Sender: TService);
 	procedure ServiceStart(Sender: TService; var Started: Boolean);
 	procedure ServiceStop(Sender: TService; var Stopped: Boolean);
 
   private
 	{ Private declarations }
   public
 	function GetServiceController: TServiceController; override;
 	function LeerPath:String;
 	function Zipear:boolean;
 	procedure reparar(ruta:string);
 	{ Public declarations }
   end;
 
 var
   CompactarYreparar: TCompactarYreparar;
 
 implementation
 
 {$R *.DFM}
 
 procedure ServiceController(CtrlCode: DWord); stdcall;
 begin
   CompactarYreparar.Controller(CtrlCode);
 end;
 
 function TCompactarYreparar.GetServiceController: TServiceController;
 begin
   Result := ServiceController;
 end;
 
 procedure TCompactarYReparar.TimerSqlTimer(Sender: TObject);
 begin
  zipear; //esto va adentro del if!!!!
    if (formatdatetime('dddd',now)='Domingo')and(formatdatetime('hh:mm AM/PM',now)='02:00 AM') then
 	  begin
 
 	  end;
 end;
 
 
 
 function TCompactarYreparar.LeerPath:string;
 Var
    Registry:TRegistry;
 
 begin
 	Registry:=TRegistry.Create;
 	Registry.RootKey:=HKEY_LOCAL_MACHINE;
 	if Registry.OpenKey('Software\Radio Frecuencia',False) then
 	   Result:=Registry.ReadString('Path');
 	Registry.Free;
 end;
 
 function TCompactarYreparar.Zipear: boolean;
 var Zip:TZip;
    ruta:String;
 begin
 TRY
    ruta:=LeerPath;
    reparar(ruta);
    if Not DirectoryExists(ruta + 'BackUp\') then
 	  CreateDir(ruta + 'BackUp\');
    Zip:=TZip.create(nil);
    zip.FileSpecList.Add(ruta + 'Base.mdb');
    zip.Filename:=ruta + 'BackUp\' + FormatDateTime('DDMM_hhmm',now)+'.ZIP';
    zip.Add;
    if FileExists(ruta + 'Base.mdb') then
 	  DeleteFile(ruta + 'Base.mdb');
    CopyFile(pchar(ruta + 'basenueva.mdb'),Pchar(ruta+'Base.mdb'),false);
    if FileExists(ruta+'basenueva.mdb') then
 	  DeleteFile(ruta+'basenueva.mdb');
    result:=TRUE;
 EXCEPT
    REsult:=FALSE
 END;
 end;
 
 procedure TCompactarYreparar.reparar(ruta:string);
 
  var
  engine: IJetEngine;
  src, dst, path: WideString;
 begin
    // Directio donde se encuentra
    path :=ruta;
    //src: Base de Datos existente con assword antiguo
    src := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + path + 'base.mdb' +
    ';Jet OLEDB:Database Password=basepdt6146';
    //dst: Base de Datos nueva con password cambiado
    dst := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + path + 'basenueva.mdb' +
    ';Jet OLEDB:Database Password=basepdt6146';
  engine := CoJetEngine.Create();
  engine.CompactDatabase(src, dst);
 end;
 
 
 
 
 procedure TCompactarYreparar.ServiceBeforeInstall(Sender: TService);
 begin
  application.Run;
 end;
 
 
 
 procedure TCompactarYreparar.ServiceStart(Sender: TService;
   var Started: Boolean);
 begin
 application.Run;
 end;
 
 procedure TCompactarYreparar.ServiceStop(Sender: TService;
   var Stopped: Boolean);
 begin
    stopped:=true;
 end;
 
 end.
Responder Con Cita
  #4  
Antiguo 12-11-2004
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
Mi niño. Si el servicio no esta registrado, es logico que se ejecute una sola vez, como si de una aplicacion trivial se tratase. Creo que para instalarlo basta con especificar el parametro /INSTALL luego del nombre del servicio.

Puedes siempre confirmar que el mismo aparezca entre los servicios en el control panel, o escribiendo net start en el command prompt
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #5  
Antiguo 12-11-2004
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Hector, Gracias por la info, pero el /INSTALL ya lo habia probado y no me los registra, solo lo ejecuta una vez, no se si tendria que especificar ese parametro dentro de la aplicación y que haga algo mas!!! pero bueno lo desconozco .. Gracias igual!!
Responder Con Cita
  #6  
Antiguo 12-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Vamos a ver, mis conocimietos de servicios son prácticamente nulos pero la ayuda de Delphi dice:

Cita:
Empezado por ayuda de Delphi
OnExecute event (TService)

If you are not spawning a new thread to handle individual service requests in an OnStart event handler, this is where you implement the service. When the OnExecute event handler finishes, the service thread terminates. Most OnExecute event handlers contain a loop that calls the service thread’s ProcessRequests method so that other service requests are not locked out.
¿Dónde está el evento OnExecute? Sin un loop como el que indica la ayuda y el ejemplo que ahí mismo viene, pues parece lógico que el servicio se detenga.

// Saludos
Responder Con Cita
  #7  
Antiguo 13-11-2004
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Mas problemas Con el Servicio!

Cuando pongo (nombre de archivo) /INSTALL me da el siguiente error y no me lo instala ni me lo registra? tienen alguna idea??

Service "Compactar y Reparar" failed to install with error: System Error. Code -1073741571
Responder Con Cita
  #8  
Antiguo 13-11-2004
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Talking

se me dio por probar con /REGISTER y me lo creo! y me lo agrego en los servicios.. despues lo inicie y me dio un error que decia "el servicio Compactar y Reparar" (asi se llama) no a respondido a las peticiones de... y se me quedo con el control total del CPU, jijijii bueno seguire probando!!! haa no lo pude detener.. tube que reiniciar la pc!
Responder Con Cita
  #9  
Antiguo 10-03-2009
angelbem angelbem is offline
Registrado
 
Registrado: jun 2007
Posts: 4
Poder: 0
angelbem Va por buen camino
Respuesta

Hola, eh leido el problema que te sale de compactar y reparar,
Lo que pasa que al instalarlo como servicio la ruta donde levanta el servicio es la de documents and settings y como tu base de datos no esta en esa dirección ocurre el error que mencionas, lo que te recomiendo es que utilices el registro de windows para guardar la ruta de tu base de datos y antes de compartar captures la ruta y coloca tu aplicacion en el directorio donde se encuentra la base de datos con el setcurretdir() o algo por el estilo
Suerte
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 19:07:55.


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