Tengo un programa que se actualiza, según si la version que tiene el cliente esta o no actualizada, haciendo click en un formulario de actualizacion, que el cliente elije ejecutar.
Para ello, descargo el programa actualizado desde un ftp.
Para ello, utilice una funcion que escribio Biel en su blog (http://bielsys.blogspot.com/2009/04/act ... ca-de.html) hace ya mucho tiempo.
El problema me surge ahora, en algunas maquinas con Windows 10 (no en todas), descarga el programa, pero no renombra el exe descargado por el actual.
Alguien le ha pasado o tiene alguna solucion alrtenativa
Este es mi codigo:
- Code: Select all Expand view
cFile := "aplicacion.exe"
cDirLocal := hb_curdrive()+":\"+CurDir()
IF ConectaServerFtp()
aFiles:=oFtp:ListFiles('public_html/descargas/aplicacion.exe')
IF LEN(aFiles) = 0
MsgStop("Error de descarga al comparar!!","ERROR")
oFtp:Close()
RETURN .F.
ENDIF
nSize := aFiles[1,2]
IF nSize = 0
MsgStop("Error de descarga al bajar!!","ERROR")
oFtp:Close()
RETURN .F.
ENDIF
oFtp:DownLoadFile( ".\tmp.exe", 'public_html/descargas/aplicacion.exe' )
ELSE
oFtp:Close()
MsgStop("Fallo la conexion...","Error")
RETURN nil
ENDIF
oFtp:Close()
IF FSIZE(".\tmp.exe") = nSize .AND. nSize > 0
MsgWait("Reinciciando la aplicacion","Espere",1)
ResToFile()
WinExec( cDirlocal+'\ActVer.exe '+ cFile ,0)
PostQuitMessage(0)
QUIT
ELSE
MsgStop("Error de descarga al renombrar!!","ERROR")
QUIT
ENDIF
RETURN .t.
//----------------------------------------------------------------------------------------
#pragma BEGINDUMP
#include "Windows.h"
#include "hbApi.h"
HB_FUNC( RESTOFILE )
{
HRSRC res=FindResource(NULL,"ACTVER",RT_RCDATA);
LPDWORD bytesWritten;
int size=SizeofResource(NULL,res);
HGLOBAL hRes=LoadResource(NULL,res);
unsigned char *pRes=(unsigned char *)LockResource(hRes);
HANDLE hFile=CreateFile("ACTVER.EXE",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
WriteFile(hFile,pRes,size,&bytesWritten,NULL);
CloseHandle(hFile);
}
#pragma ENDDUMP
El codigo en C de ACTVER.EXE es el siguiente:
- Code: Select all Expand view
#include "stdio.h"
#include "windows.h"
int main( int argc, char *argv[])
{
Sleep(700);
DeleteFile( argv[1]);
rename( "tmp.exe",argv[1]);
WinExec(argv[1],argc);
return EXIT_SUCCESS;
}
Gracias de antemano