FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour C贸mo remplazar un programa en ejecuci贸n?
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
C贸mo remplazar un programa en ejecuci贸n?
Posted: Wed Mar 18, 2009 06:58 PM

Hola

Alguien me puede decir como remplazar un programa que alg煤n usuario en la red lo esta utilizando.

A veces se hacen algunas mejoras y se tiene que hacer salir a todos, para poder remplazarlo.

Antes con 16Bits, no habia este problema.

GRACIAS POR SU COLABORACION

Saludos

Adhemar

Saludos,



Adhemar C.
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Wed Mar 18, 2009 07:27 PM

Adhemar:

En 32 bits no he tenido problemas as铆 como tu lo haces.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Wed Mar 18, 2009 07:36 PM

A mi no me deja, copiar el nuevo. Sale un error que dice.
Esta siendo usado por un usuario u otro programa

y eso que la unidad donde se encuentra el programa esta mapeada como unidad de red.

Gracias nuevamente

Saludos,



Adhemar C.
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Wed Mar 18, 2009 07:47 PM

Hola

Para eso necesitas que tu aplicacion este en los pc, y no en el server, solo los datos deben estar en servidor

lo que hago cuando hay una actualizaci贸n es dejar el nuevo ejecutable en la red y un archivo ini que es la version
al comparar la version si son iguales entra al sistema, de lo contrario llama a otra aplicacion y actualiza el EXE

espero que te sirva..

Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Wed Mar 18, 2009 08:33 PM

Gracias distinguido.

Teniendo el ejecutable en las Pc's hace que los procesos sean m谩s r谩pido?

Saludos

Adhemar

Saludos,



Adhemar C.
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Wed Mar 18, 2009 09:10 PM

claro que si, solo los datos viajan por la red no el ejecutable que pesa mas de 2MB, el que tengo yo ya pesa 4.5 MB :-)

Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Wed Mar 18, 2009 09:27 PM

Gracias, muy buena idea lo del .ini, asi lo har茅.

saludos

Adhemar

Saludos,



Adhemar C.
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 11:29 AM

hola a todos,

vamos a ver ...
a mi me gusta mas la idea de tener un solo ejecutable en el server... el programa se carga una sola vez al principio asi que no debe haber mucha ventaja con ponerlo en local...pero si mucha desventaja con saber si se actualizaron o no las terminales... vamos que ante cualquier problema o error no estamos 100% seguros de que la terminal tenga la ultima version...

Lo que yo haria seria algo asi... no lo tengo hecho pero siempre lo he tenido en mente, esta en un seudocodigo....

Al inicio del programa, y justo al inicio
// Siendo nuevo.exe la nueva version y anterior.exe la anterior version
FUNCTION Main()
IF EXENAME() != "NUEVO.EXE"
IF File(Nuevo.Exe)
IF DATE(NUEVO.EXE) > DATE(ANTERIOR.EXE)
winexec("NUEVO.EXE") // 脛qui se a帽adirian los posibles parametros de entrada a main()
QUIT
ELSE
// NOS CARGAMOS LA VERSION NUEVA PQ YA ESTA ACTUALIZADO
DELETE FILE NUEVO.EXE
ENDIF
ENDIF
ELSE
// ESTAMOS EJECUTANDO LA VERSION DE NUEVO.EXE
DELETE FILE ANTERIOR.EXE // EN ALGUN MOMENTO SE BORRARA EL ANTERIOR CUANDO TODO EL MUNDO
COPY NUEVO.EXE ANTERIOR.EXE // haya SALIDO DEL PROGRAMA ANTERIOR.EXE
ENDIF
...................................................
resto programa
...................................................

El sistema se basa en:
1潞 winexec()
2陋 la actualizacion se va haciendo progresivamente en los terminales segun vayan saliendo y entrando

saludos

Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 12:00 PM

Distinguido gracias por su aporte. Muy buena idea.

Hay que ponerlo en pr谩ctica.

Saludos

Adhemar

Saludos,



Adhemar C.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 12:18 PM

La comparacion de DATE(NUEVO.EXE) > DATE(ANTERIOR.EXE) no funciona.

Es asi como se debe comparar si un programas es mas nuevo?

Saludos

Adhemar

Saludos,



Adhemar C.
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 12:52 PM
Saludos Acuellar

dale una vista a el blog de biel, especificamente en este tema, esta muy bien pensado.... te pordia servir mucho para lo que quieres y creo es facil adaptarlo a lo que necesitas

http://bielsys.blogspot.com/2009/02/actualizacion-automatica-de.html
(biel no habia tenido la oportunidad de agradecerte el aporte, muy interesante y de hecho lo uso en una aplicacion)
Posts: 215
Joined: Fri Feb 02, 2007 03:38 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 04:10 PM

Adhemar,

Si buscas algo sencillo solo haz lo siguiente : Renombra el ejecutable que estan utilizando y copias la actualizacion, eso es todo, cuando los usuarios cierren el programa y entren de nuevo ya estan actualizados y no necesitas sacar a nadie del trabajo en proceso.

Saludos desde Managua, Nicaragua,

Ramon Paredes

... Desde la Tierra de lagos y Volcanes......
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 04:21 PM

Gracias, Ramon

No lo habia tomado en cuenta.

Saludos desde Santa Cruz de la Sierra

Adhemar Cuellar

Saludos,



Adhemar C.
Posts: 326
Joined: Sun Oct 09, 2005 05:22 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 04:40 PM
He aqui las funciones que tengo en uso:

Al instalar el sistema en las terminales se mejora bastante el tiempo de respuesta y se evitan fallas por carga de Dlls y transferencia; entre otras.

Code (fw): Select all Collapse
STAT FUNC Chk_Update()          // Verifica actualizaciones
   LOCAL cOld, cNew, aOld, aNew
   LOCAL cIni, cDir, cDat, aDrv
   IF Left(CurDir(),1)<>"\"
      cDir:=CurDrive()+":\"+CurDir()+"\"
   ELSE
      cDir:="\"+CurDir()+"\"
   ENDIF
   cIni:=GetWinDir()+"\"+cNSys+".Ini"           // Path en INI
   cDat:=GetPvProfString(cNSys,"DirDat","",cIni)
   cDir:=Lower(cDir)           // Local
   cDat:=Lower(cDat)           // Servidor
   IF !Empty(cDat) .AND. cDir<>cDat
      CursorWait()
      IF File("RC-Update.Exe")
         cOld:=cDir+"RC-eXtended.Exe"
         cNew:=cDat+"RC-eXtended.Exe"
         IF !File(cNew)
            aDrv:=ADrives()  // Abre unidades disponibles (por si acaso)
         ENDIF
         IF File(cNew)
            aOld:=Directory(cOld)
            aNew:=Directory(cNew)
            IF aOld[1,3]<aNew[1,3] .OR. (aOld[1,3]=aNew[1,3] .AND. aOld[1,4]<>aNew[1,4])
               CursorWait()
               WinExec("RC-Update.Exe")
               QUIT
            ENDIF
         ELSE
            MsgAlert("La ruta de trabajo no esta disponible.","Precauci贸n!")
            QUIT
         ENDIF
      ENDIF
   ENDIF
RETURN (NIL)

#Include "FiveWin.Ch"

FUNCTION RC_Update()      // Copia actualizaci贸n
   LOCAL cIni, cDir, cDat
   LOCAL cOld, cNew
   LOCAL cNSys
   CursorWait()
   cNSys:="RC-eXtended"
   IF Left(CurDir(),1)<>"\"
      cDir:=CurDrive()+":\"+CurDir()+"\"
   ELSE
      cDir:="\"+CurDir()+"\"
   ENDIF
   cIni:=GetWinDir()+"\"+cNSys+".Ini"
   cDat:=GetPvProfString(cNSys,"DirDat","",cIni)
   cOld:=cDir+"RC-eXtended.Exe"
   cNew:=cDat+"RC-eXtended.Exe"
   SysWait(1)
   IF File(cNew)
      FErase(cOld)
      CursorWait()
      CopyFile(cNew,cOld,.F.)
   ENDIF
   WinExec(cOld)
   QUIT
RETURN (NIL)
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: C贸mo remplazar un programa en ejecuci贸n?
Posted: Thu Mar 19, 2009 07:49 PM
Hola a todos

Logr茅 hacer funcionar de esta forma
Code (fw): Select all Collapse
    * FACTURAn.EXE El Nuevo
  * FACTURAa.EXE El Anterior
  
 aExeOn:=UPPER(AllTrim(SUBS(EXENAME(),AT("FACTURAn",EXENAME()),15)))
   IF aExeOn != "FACTURAn.EXE"
    
     IF File("FACTURAn.Exe")
       nHora:=FILETIME("FACTURAn.EXE"); aHora:=FILETIME("FACTURAa.EXE")
       vFecN:=dToS(FILEDATE("FACTURAn.EXE"))+Left(nHora,2)+Subs(nHora,4,2)+Right(nHora,2)
       vFecA:=dToS(FILEDATE("FACTURAa.EXE"))+Left(aHora,2)+Subs(aHora,4,2)+Right(aHora,2)
       
       IF vFecN > vFecA
         winexec("FACTURAn.EXE") 
         Quit
        ELSE
          DELETE FILE FACTURAn.EXE
        ENDIF
      ENDIF 
   ELSE
       RENAME FACTURAa.EXE TO FACTURAx.EXE
       COPY FILE FACTURAn.EXE To FACTURAa.EXE
       DELETE FILE FACTURAx.EXE        
   ENDIF

Con un solo ejecutable. Tambi茅n se podr铆a aplicar estando el ejecutable en las terminales como el Ejemplo de Armando.
Por si a algui茅n lo necesita.

Saludos

Adhemar
Saludos,



Adhemar C.