Alfonso,
Si... Ya pase por el mismo tema...
El truco es este...
Te armas un exe que nada tenga que ver con tu aplicación ...
En mi caso le puse de nombre Runner... pero como te imaginaras le podes
poner el nombre que se te ocurra...
El programa básicamente lo que debe hacer es leer un archivo ini...
este archivo a su vez tiene una entrada para el Runner,
[Runner]
DirNewVer=F:\Fuentes\ACE\Instaladores\Distribuir\
Sistema=ACE
que le indica cual ese el nombre del exe y donde se encuentra la
ultima versión...
Ahora solo te queda saber como darte cuenta cual es la última versión...
Para eso, en mi caso uso el versionador de VFP, con lo cual la versión va a
estar "compilada" en el exe...
Bueno si sigo esa norma, con este algoritmo se si debo copiar o no ese
exe...
LOCAL llHuboError
lcSistemaOri=_Screen.DirNewVer+_Screen.Sistema+".EXE"
lcSistemaDes=_Screen.Sistema+".EXE"
Thisform.PoneColor()
If File(lcSistemaDes)
lnObtuvoD=Agetfileversion(laVerAct,lcSistemaDes)
lnSizeD=SizeArray[ADIR(SizeArray, lcSistemaDes),2]
Else
lnSizeD=0
Endif
Thisform.PoneColor()
lnObtuvoO=Agetfileversion(laVerNew,lcSistemaOri)
Thisform.PoneColor()
If Empty(lnObtuvoO)
lcTexto="No se puede obtener la nueva actualización. Los motivos pueden ser
los siguientes:"+Chr(13)+;
"1) El sistema recien fue instalado y esta mal configurado."+Chr(13)+;
"2) El sistema acaba de ser actualizado y la actualización en el servidor
está corrupta."+Chr(13)+;
"3) El servidor no esta disponible en este momento (muy probale si Ud.
accede a traves de Internet)."+Chr(13)+;
"Si accede por Internet, revise si tiene internet, si no tiene consulte con
su proveedor,"+;
" caso contrario espere 5 minutos e intente nuevamente."
Messagebox(lcTexto,16,"Avise a Sistemas")
llHuboError=.T.
Else
lnSizeO=SizeArray[ADIR(SizeArray, lcSistemaOri),2]
*MESSAGEBOX(STR(lnObtuvoD)+","+laverNew[4]+","+laVerAct[4])
lnVersionNew=Val(Getwordnum(laVerNew[4],1,"."))
lnReleaseNew=Val(Getwordnum(laVerNew[4],2,"."))
lnCompilacionNew=Val(Getwordnum(laVerNew[4],3,"."))
llVerNueva=.F.
llVerIgual=.F.
If !Empty(lnObtuvoD)
lnVersionAct=Val(Getwordnum(laVerAct[4],1,"."))
lnReleaseAct=Val(Getwordnum(laVerAct[4],2,"."))
lnCompilacionAct=Val(Getwordnum(laVerAct[4],3,"."))
llVerNueva=lnVersionNew>lnVersionAct Or lnReleaseNew>lnReleaseAct Or
lnCompilacionNew>lnCompilacionAct
llVerIgual=lnVersionNew=lnVersionAct And lnReleaseNew=lnReleaseAct And
lnCompilacionNew=lnCompilacionAct
Endif
Thisform.PoneColor()
If (!File(lcSistemaDes) Or Empty(lnObtuvoD) Or llVerNueva Or;
(llVerIgual And lnSizeO#lnSizeD))
Wait Window "Realizando actualización. Aguarde un momento por favor..."
Nowait Noclear
Copy File &lcSistemaOri To &lcSistemaDes
Wait Clear
Endif
Endif
Thisform.PoneColor()
If !llHuboError And File(lcSistemaDes)
lnObtuvoD=Agetfileversion(laVerAct,lcSistemaDes)
Endif
Thisform.PoneColor()
If !llHuboError And !File(lcSistemaDes) Or Empty(lnObtuvoD)
Messagebox("No se pudo instalar adecuadamente la actualización.",16,"Avise a
Sistemas")
llHuboError=.T.
Endif
Thisform.PoneColor()
If !llHuboError And (laVerNew[4]=laVerAct[4])
lnSizeO=SizeArray[ADIR(SizeArray, lcSistemaOri),2]
lnSizeD=SizeArray[ADIR(SizeArray, lcSistemaDes),2]
If lnSizeO#lnSizeD
Messagebox("Aun no se terminó de actualizar el servidor.",16,"Espere unos
minutos e intente nuevamente")
llHuboError=.T.
Endif
Endif
Thisform.HuboError=llHuboError
Thisform.Release()
Espero que te sirva,
Saludos,
Pancho
Córdoba
El 15 de septiembre de 2011 02:36, Alfonso Arias Lemas
<[email protected]>escribió:
> Hola colegas,
>
> Gustaria de saber su opiniones sobre este tema.
> Estoy implementando un método para que mis sistemas hagan actualizaciones
> de forma automática con los archivos recientes colocados en el servidos,
> hasta aquí todo bien. Ya logre hacer los download para el equipo local, el
> problema me surge cuando tengo en nuevo .EXE en el computador y tengo que
> subtituirlo por el viejo, Cómo lo hago? si el control de sistema es el .EXE
> viejo y es el mismo que esta corriendo, o sea, no puede copiarse asi mismo,
> Alguna idea compañeros?????
>
> Saludos,
> Alfonso
>