Actualizando un proyecto
Moderator: Neosoft Support
Actualizando un proyecto
¿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
Dix@n
Re: Actualizando un proyecto
¿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.
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
Greetings/Saludos, Jose.
www.icemansoft.es
www.icemansoft.es
Re: Actualizando un proyecto
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
Is the english forum now a spanish forum?
Wrangler
--------------
"You never know about a woman. Whether she'll laugh, cry or go for a gun." - Louis L'Amour
Windows 7 Ultimate SP1 64bit
16GB Ram
Asus GTX 950 OC Strix
Software made with NeoBook
http://highdesertsoftware.com
--------------
"You never know about a woman. Whether she'll laugh, cry or go for a gun." - Louis L'Amour
Windows 7 Ultimate SP1 64bit
16GB Ram
Asus GTX 950 OC Strix
Software made with NeoBook
http://highdesertsoftware.com
Re: Actualizando un proyecto
Sorry Wrangler, the question was made in Spanish so I wrote in Spanish too.Wrangler wrote:Is the english forum now a spanish forum?
I think that we must move this thread to the Spanish side.
Greetings/Saludos, Jose.
www.icemansoft.es
www.icemansoft.es
Re: Actualizando un proyecto
Sorry to post it in spanish, Danito could you explain me how to do what you suggest?
Dix@n