Cómo remplazar un programa en ejecución?
Cómo remplazar un programa en ejecución?
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
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.
Adhemar C.
Re: Cómo remplazar un programa en ejecución?
Adhemar:
En 32 bits no he tenido problemas así como tu lo haces.
Saludos
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
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Re: Cómo remplazar un programa en ejecución?
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
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.
Adhemar C.
- Patricio Avalos Aguirre
- Posts: 1028
- Joined: Fri Oct 07, 2005 1:56 pm
- Location: La Serena, Chile
- Contact:
Re: Cómo remplazar un programa en ejecución?
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..
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
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
Re: Cómo remplazar un programa en ejecución?
Gracias distinguido.
Teniendo el ejecutable en las Pc's hace que los procesos sean más rápido?
Saludos
Adhemar
Teniendo el ejecutable en las Pc's hace que los procesos sean más rápido?
Saludos
Adhemar
Saludos,
Adhemar C.
Adhemar C.
- Patricio Avalos Aguirre
- Posts: 1028
- Joined: Fri Oct 07, 2005 1:56 pm
- Location: La Serena, Chile
- Contact:
Re: Cómo remplazar un programa en ejecución?
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
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
Re: Cómo remplazar un programa en ejecución?
Gracias, muy buena idea lo del .ini, asi lo haré.
saludos
Adhemar
saludos
Adhemar
Saludos,
Adhemar C.
Adhemar C.
Re: Cómo remplazar un programa en ejecución?
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
// _ 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
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
// _ 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
Re: Cómo remplazar un programa en ejecución?
Distinguido gracias por su aporte. Muy buena idea.
Hay que ponerlo en práctica.
Saludos
Adhemar
Hay que ponerlo en práctica.
Saludos
Adhemar
Saludos,
Adhemar C.
Adhemar C.
Re: Cómo remplazar un programa en ejecución?
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
Es asi como se debe comparar si un programas es mas nuevo?
Saludos
Adhemar
Saludos,
Adhemar C.
Adhemar C.
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Cómo remplazar un programa en ejecución?
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/act ... ca-de.html
(biel no habia tenido la oportunidad de agradecerte el aporte, muy interesante y de hecho lo uso en una aplicacion)
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/act ... ca-de.html
(biel no habia tenido la oportunidad de agradecerte el aporte, muy interesante y de hecho lo uso en una aplicacion)
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
- Ramon Paredes
- Posts: 215
- Joined: Fri Feb 02, 2007 3:38 pm
- Location: Managua, Nicaragua
Re: Cómo remplazar un programa en ejecución?
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
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......
Re: Cómo remplazar un programa en ejecución?
Gracias, Ramon
No lo habia tomado en cuenta.
Saludos desde Santa Cruz de la Sierra
Adhemar Cuellar
No lo habia tomado en cuenta.
Saludos desde Santa Cruz de la Sierra
Adhemar Cuellar
Saludos,
Adhemar C.
Adhemar C.
- Alfredo Arteaga
- Posts: 326
- Joined: Sun Oct 09, 2005 5:22 pm
- Location: Mexico
- Contact:
Re: Cómo remplazar un programa en ejecución?
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.
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: Select all
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)
Re: Cómo remplazar un programa en ejecución?
Hola a todos
Logré hacer funcionar de esta forma
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
Logré hacer funcionar de esta forma
Code: Select all
* 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
Por si a alguién lo necesita.
Saludos
Adhemar
Saludos,
Adhemar C.
Adhemar C.