Page 1 of 1

Actualizando un proyecto

PostPosted: Thu Oct 12, 2017 7:27 am
by Dixan
¿Existe alguna manera para actualizar un proyecto que uno haya hecho y no tener que sustituir el anterior por el nuevo? por ejemplo al estilo delas base de atos de los antivirus

Re: Actualizando un proyecto

PostPosted: Thu Oct 12, 2017 11:40 pm
by CN_Iceman
¿Te refieres a actualizar el EXE de tu aplicación parcheando?
Yo creo que esa opción sería demasiado complicada.

Lo que yo hago para que mis programas se actualicen automáticamente es lo siguiente.
- En mi servidor tengo un archivo de texto llamado "Version.txt" que incluye la última versión del programa.
- El programa al ejecutarse compara su versión, con la que hay en el servidor. Así sabe si necesita actualizarse.
- Para la actualización, se descarga el nuevo ejecutable con otro nombre.
- Hago un HASH MD5 del nuevo ejecutable y lo comparo con el que previamente le hice antes de subirlo a mi servidor. Esto es para comprobar que la descarga es correcta.
- Desde dentro del programa, creo un archivo de proceso por lotes (.BAT) cuya función es matar el proceso de mi programa, borrar el ejecutable, copiar la actualización con el nombre de mi programa y ejecutarlo de nuevo.

De esta forma, consigues una actualización automática y que tu programa se ejecute de nuevo ya actualizado.

Aquí te pongo el código que yo uso. Por supuesto faltan cosillas que uso como una custom window con una barra de proceso, un timer (en donde se ejecuta un código para indicar el tiempo que queda para descargar la actualización, etc...), pero lo importante está aquí. Puedes adaptarlo como quieras.

Code: Select all
.Prepara los datos
SetVar "[DirNombreExe]" "[CommandLine]"
ExtractFileName "[DirNombreExe]" "[NombreExe]"
ExtractFilePath "[DirNombreExe]" "[Carpeta]"

SetVar "[Barra_de_Estado]" "Descargando nueva versión de [Nombre_Programa]..."
DownloadFile "http://www.miservidor.es/ACTUALIZACION.ice" "[PubDir]ACTUALIZACION.ice" "HideProgress+Async"

SetVar "[Barra_de_Estado]" "Verificando integridad del archivo..."
GoSub "Comprueba_MD5"
   If "[MD5_Igual]" "<>" "SI"
      MessageBox "ERROR: Archivo descargado incorrecto." "El archivo de actualización está corrupto o no se ha descargado correctamente.||¿Quieres intentar de nuevo la descarga?" "SI|NO" "[SINO]"
      If "[SINO]" "=" "1"
         GotoLine "Inicia_Descarga_actualizacion"
      Else
          ClearVariables "[Barra_de_Estado],[Estado]"
          CloseCustomWindow "Ventana_Actualizacion"
          Return
      EndIf
   Else
       GotoLine "Continua_con_actualizacion"
   EndIf

:Continua_con_actualizacion
   SetVar "[Barra_de_Estado]" "Preparando actualización..."
   .Escribe el BAT
   FileWrite "[PubDir]Reinip.bat" "All" "start /B /WAIT taskkill /f /im [NombreExe]"
   FileWrite "[PubDir]Reinip.bat" "Append" "start /B /WAIT timeout 2"
   FileWrite "[PubDir]Reinip.bat" "Append" "DEL /Q /F [#34][DirNombreExe][#34]"
   FileWrite "[PubDir]Reinip.bat" "Append" "start /B /WAIT timeout 1"
   FileWrite "[PubDir]Reinip.bat" "Append" "COPY [#34][Carpeta]ACTUALIZACION.ice[#34] [#34][DirNombreExe][#34]"
   FileWrite "[PubDir]Reinip.bat" "Append" "start /B /WAIT timeout 1"
   FileWrite "[PubDir]Reinip.bat" "Append" "DEL /Q /F [#34][Carpeta]ACTUALIZACION.ice[#34]"
   FileWrite "[PubDir]Reinip.bat" "Append" "[#34][DirNombreExe][#34]"

   .Ejecuta el BAT
   SetVar "[Barra_de_Estado]" "Cerrando programa y ejecutando actualización automática..."
   Delay "1500"
   CloseCustomWindow "Ventana_Actualizacion"
   Run "[PubDir]Reinip.bat" "" "RunOnce+Hidden" "" ""
   Return
Else
    .No se ha encontrado el archivo ACTUALIZACION.ice
    AlertBox "ERROR de actualización" "No se ha establecido enlace con el servidor de actualización|o bien, no se ha encontrado el fichero de actualización necesario.||Inténtalo de nuevo más tarde."
    CloseCustomWindow "Ventana_Actualizacion"
    Return
EndIf


Re: Actualizando un proyecto

PostPosted: Mon Oct 16, 2017 7:19 am
by Danito
También puedes guardar tu código como una función de Neobook en la misma carpeta del ejecutable y la llamas con el comando Call, así solo tendrías que reemplazar ese archivo de texto, puedes guardarla con alguna extensión propia y ocultarla para que el usuario no la modifique por error.

Re: Actualizando un proyecto

PostPosted: Mon Oct 16, 2017 8:46 am
by Wrangler
Is the english forum now a spanish forum?

Re: Actualizando un proyecto

PostPosted: Mon Oct 16, 2017 12:56 pm
by CN_Iceman
Wrangler wrote:Is the english forum now a spanish forum?


Sorry Wrangler, the question was made in Spanish so I wrote in Spanish too.
I think that we must move this thread to the Spanish side.

Re: Actualizando un proyecto

PostPosted: Tue Oct 17, 2017 4:17 am
by Dixan
Sorry to post it in spanish, Danito could you explain me how to do what you suggest?