UPDATER - Actualiza la aplicacion desde la misma
Publicado: 19 Feb 2017 02:59
Seguramente abran visto que para actualizar la aplicacion hace falta tener otra dentro de la misma para que no de errores ahora bien y si usamos un bat para cerrar toda la rama de procesos de la misma y mover la actualizacion una vez descomprimida hay ya no da error he jhahahasjsadsjk
Este Updater esta basado en el Updater-NG de NikolasG los errores que tenia el suyo era que no movia todos los archivos ahora lista cada carpeta del zip y hace una lista para que actualize bien y bueno eso el otro bug era que solo cerraba la aplicacion que estabas usando para actualizar si tenias la aplicacion varias veces abierta remplazaba dos archivos y dejaba la aplicacion rip xD
tambien lo que he echo a sido una limpieza ya no funciona con xml ni usa las funciones de ams para comprobar la version he usado lua socket que es 7 veces mas rapido Bueno suerte con vuestras aplicaciones espero que no os alla dado un ictus por mi ortografia jajajaj
Aqui el modulo pero no sin antes poner a NikolasG en los agradecimientos de este post gracias ha el y ami es posible este updater tan perfecto
Este Updater esta basado en el Updater-NG de NikolasG los errores que tenia el suyo era que no movia todos los archivos ahora lista cada carpeta del zip y hace una lista para que actualize bien y bueno eso el otro bug era que solo cerraba la aplicacion que estabas usando para actualizar si tenias la aplicacion varias veces abierta remplazaba dos archivos y dejaba la aplicacion rip xD
tambien lo que he echo a sido una limpieza ya no funciona con xml ni usa las funciones de ams para comprobar la version he usado lua socket que es 7 veces mas rapido Bueno suerte con vuestras aplicaciones espero que no os alla dado un ictus por mi ortografia jajajaj
Aqui el modulo pero no sin antes poner a NikolasG en los agradecimientos de este post gracias ha el y ami es posible este updater tan perfecto
---ESTO REQUIERE DE LUA SOCKET
http = require("socket.http")
function lua_dostring(sLua)
local Return, Error = pcall(function(s)
return loadstring(s)();
end, sLua);
return Return, Error;
end
--#############################5.0#############################
--# www.amsspecialist.com #
--# Basado en updater-ng pero muy mejorado #
--#############################################################
-------------------------INSTALACION---------------------------
--#1 CREARSE UNA CUENTA EN HOSTINGER.ES O CUALQUIER HOSTING SUBIR EL ARCHIVO VERSION.LUA Y LA ACTUALIZACION UPDATE.ZIP
--#2 VERSION.LUA ESTARA EN LA CARPETA DEL APZ PERO AQUI OS DEJO UN EJEMPLO
--[[
NEWVER = 1 -- VERSION DE LA APLICACION
urlD = "stms.esy.es/recursos/UPDATE.ZIP" --URL DE LA ACTUALIZACION
]]
--#3 CAMBIAR ESTO
DEFINE_Url = "http://ejemplo/version.lua"; -- PONER AQUI LA URL DEL ARCHIVO VERSION.LUA
DEFINE_FileOfVersion = _SourceFolder.."\\AutoPlay\\Scripts\\version.txt"; -- ESTA SERA LA VERSION ACTUAL DE LA APLICACION EDITAR EN CADA ACTUALIZACION
--#############################################################
--ESTO ESTA PUESTO PARA SER AUTOMATICO SE ADAPTARA SOLO
DEFINE_Temporary_Folder = _TempFolder.."\\UpdaterNG";
DEFINE_Destination_Folder = _SourceFolder.."\\"
DEFINE_Path_To_The_File_To_Run_After_Upgrading = (_SourceFolder.."\\".._SourceFilename);
DEFINE_Version = TextFile.ReadToString(DEFINE_FileOfVersion);
UpdaterNG = {};
function UpdaterNG.ToUpdate()
--COMPRUEBA LA CONEXION Y SI AHI UNA NUEVA VERSION
if UpdaterNG.CheckUpdates() == "OBSOLETE" then
FileInformation = String.SplitPath(urlD);
--Descarga la actualizacion desde la url obtenida desde internet
HTTP.Download(urlD, DEFINE_Temporary_Folder.."\\"..FileInformation.Filename..FileInformation.Extension, MODE_BINARY, 20, 80, nil, nil, UPDATER_DownloadCallback);
if bCancelled then
bCancelled=false
Paragraph.SetProperties("conf_Paragraph6", {BGColor=Math.HexColorToNumber("00A240"),Text="CLICK TO UPDATE",Enabled=true});
Button.SetProperties("conf_Button124", {ButtonFile=_SourceFolder.."\\AutoPlay\\Buttons\\ref.btn"})
do return end
end
UpdaterNG.DoZIP(urlD)
else
Paragraph.SetProperties("conf_Paragraph6", {BGColor=Math.HexColorToNumber("C0004B"),Text="NO SE PUDO ACTUALIZAR"});
end
end
function UpdaterNG.DoZIP(zip)
--Separa el nombre del archivo
FileInformation = String.SplitPath(zip);
--Extrae la actualizacion
Paragraph.SetText("conf_Paragraph6", "DESCOMPRIMIENDO ZIP")
Zip.Extract(DEFINE_Temporary_Folder.."\\"..FileInformation.Filename..FileInformation.Extension, {"*.*"}, DEFINE_Temporary_Folder.."\\unzip\\", true, true, "", ZIP_OVERWRITE_NEVER, nil);
Paragraph.SetText("conf_Paragraph6", "REINICIANDO")
--Numera el contenido del zip descargado para hacer una lista
str=""
for i,v in pairs(Zip.GetContents(DEFINE_Temporary_Folder.."\\"..FileInformation.Filename..FileInformation.Extension, true)) do
--Crea las carpetas que no exisian en la antigua version
if Folder.DoesExist(String.SplitPath(v).Folder) == false then
Folder.Create(_SourceFolder.."\\"..v);
end
--Hace la lista
str=str..[[move "]]..DEFINE_Temporary_Folder..[[\unzip\"]]..v..' "'..DEFINE_Destination_Folder..v..'"\r\n'
end
--hace un .bat para cerrar la aplicacion y todas sus ventanas despues mueve los archivos y ejecuta la aplicacion
TextFile.WriteFromString(DEFINE_Temporary_Folder.."\\MoveUpdate.bat", [[
Taskkill /F /IM ]].. _SourceFilename ..'\r\n'.. [[
@ECHO OFF
]]..'\r\n'.. str ..[[
start]]..' "" "'..DEFINE_Path_To_The_File_To_Run_After_Upgrading..'"\r\n'..[[
DEL "%~f0"
]], false);
--EJECUTA EL .BAT
File.Run(DEFINE_Temporary_Folder.."\\MoveUpdate.bat", "", "", SW_HIDE, false);
end
function UpdaterNG.CheckUpdates()
--COMPRUEBA LA CONEXION
if UpdaterNG.Conect() then
UpdaterNG.Refresh()--obtiene la version mas reciente asi como la url de donde descargarla
--Comprobamos si ahi actualizaciones
if DEFINE_Version >= NEWVER then
Paragraph.SetProperties("conf_Paragraph6", {Text="ATUALIZADO",Enabled=false,BGColor=Math.HexColorToNumber("1E88E5")});
SUP="UPDATED"
else
Paragraph.SetProperties("conf_Paragraph6", {BGColor=Math.HexColorToNumber("00A240"),Text="CLICK TO UPDATE",Enabled=true});
SUP="OBSOLETE"
end
else
Paragraph.SetProperties("conf_Paragraph6", {BGColor=Math.HexColorToNumber("C0004B"),Text="SIN CONEXION"});
SUP="NO INTERNET"
end
return SUP
end
function UpdaterNG.Refresh()
--esto simplemente coje el texto de la url y lo ejecuta como codigo lua
lua_dostring(http.request(DEFINE_Url))
end
function UpdaterNG.Conect()
--comprueba la conexion
if HTTP.GetConnectionState().Connected then
con=true
else
con=false
end
return con
end
function UPDATER_DownloadCallback(BytesSoFar, TotalBytes, TransferRate)--ESTA FUNCION ES TAN SIMPLE QUE NI LA EXPLICO
if(TotalBytes ~= 0)then
strProgress = "Descargando: "..Math.Round(BytesSoFar/TotalBytes * 100) .."%"
strkbs = String.GetFormattedSize(string.format('%.1f', TransferRate)*1024, FMTSIZE_AUTOMATIC, true);
strKbsRate = 'Speed: '..strkbs
else
strProgressText,strKbsRate,strProgress = '','','';
end
Paragraph.SetText("conf_Paragraph6", strProgress..' '..strKbsRate);
Button.SetProperties("conf_Button124", {ButtonFile=_SourceFolder.."\\AutoPlay\\Buttons\\cwer.btn"})
if bCancelled then
Updating=false
return false;
else
Updating=true
return true;
end
end
bCancelled = false;