A pedido del publico; Esto lo hice hace como 1 año y medio;
Es necesario poner el codigo en el notepad++ sin "ajuste de linea", ya que la programación es jerarquíca, y no se ve bien porque el foro no esta adaptado a esa resolución que se necesita...
Ojo; no utilice el regedit, ni nada fuera del comportamiento normal, ya que posiblemente iban a utilizar la aplicación sin permisos de administrador
Primero, esto lo puse en "Pre load" de la página:
buskeda_reinicio = File.Find(_SourceFolder, "reinicio_kk.ini", true, false, nil);
if (buskeda_reinicio) then
File.Delete(_SourceFolder.."\\reinicio_kk.ini", false, false, false, nil);
error = Application.GetLastError();
if error ~= 0 then
Dialog.Message("Error de Borrado - N10001", "Ocurrio un error borrando el archivo 'reinicio_kk.ini', este archivo le indica al Juego\nque debe reiniciarse despues de una operación generalmente de restablecimiento, pero\nel sistema no a podido borrarlo automaticamente, es crucial que lo hagas manualmente.\n \nSe procederá a abrir la carpeta contenedora...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
File.ExploreFolder(_SourceFolder, SW_MAXIMIZE);
os.exit();
end
end
busc_ctu = File.Find(_SourceFolder, "juego_actualizador.exe", false, false, nil, nil);
if (busc_ctu) then
File.Delete(_SourceFolder.."\\juego_actualizador.exe", false, false, false, nil);
File.Delete(_SourceFolder.."\\*.tmp", false, false, false, nil);
end
Esto lo puse en On show de la página
Label.SetText("Label1", "Verificando Actualizaciones...");
testear_actualizacion = HTTP.TestConnection(""..web_servidor.."/juego/actualizaciones/2.0.0.0/2.0.0.0.ini", 20, 80, nil, nil);
if (testear_actualizacion) then
HTTP.Download(""..web_servidor.."/juego/actualizaciones/2.0.0.0/2.0.0.0.ini",_TempFolder.."\\2.0.0.0.zip", MODE_BINARY, 20, 80, nil, nil, nil);
error5 = Application.GetLastError();
StatusDlg.Hide();
if error5 ~= 0 then
Paragraph.SetVisible("Paragraph1", false);
Progress.SetVisible("Progress1", false);
Web.SetVisible("Web1", false);
Web.SetVisible("Web2", true);
Dialog.Message("Error de Descarga - K10002", "Ocurrio un error descargando el archivo verificador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
Zip.Extract(_TempFolder.."\\2.0.0.0.zip", {"*.*"}, _TempFolder , true, true, "miclavequequiero", ZIP_OVERWRITE_ALWAYS, nil);
error6 = Application.GetLastError();
StatusDlg.Hide();
if error6 ~= 0 then
Dialog.Message("Error de Extracción - K20002", "Ocurrio un error extrayendo el archivo actualizador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
File.Delete(_TempFolder.."\\2.0.0.0.zip", false, false, false, nil);
Crypto.Base64DecodeFromFile(_TempFolder.."\\2.0.0.0.ini", _TempFolder.."\\2.0.0.0_2.ini");
error7 = Application.GetLastError();
if (error7 ~=0) then
Dialog.Message("Error de Descodificación - K30002", "Ocurrio un error descodificando el archivo actualizador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
File.Delete(_TempFolder.."\\2.0.0.0.ini", false, false, true, nil);
if (Application.GetLastError() ~= 0) then
Dialog.Message("Error de Borrado - K20002", "Ocurrio un error borrando el archivo actualizador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
File.Rename(_TempFolder.."\\2.0.0.0_2.ini", _TempFolder.."\\2.0.0.0.ini");
error8 = Application.GetLastError();
if (error8 ~= 0) then
Dialog.Message("Error de Renombramiento - K10003", "Ocurrio un error renombrando el archivo verificador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
version_actual = INIFile.GetValue(_TempFolder.."\\2.0.0.0.ini", "Datos Juego", "Version Actual");
error9 = Application.GetLastError();
if (error9 ~=0) then
Dialog.Message("Error de Verificación - K20001 A", "Ocurrio un error verificando la versión del juego\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
version_juego = File.GetVersionInfo(_SourceFolder.."\\juego.exe").ProductVersion;
error10 = Application.GetLastError();
if (error10 ~=0) then
Dialog.Message("Error de Verificación - K20001 B", "Ocurrio un error verificando la versión del juego\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
compara_versiones = String.CompareFileVersions(version_actual, version_juego);-- con esta accion nos compara dos strings ( De versiones tipo 1.0.0.0) y debuelve 1 si el paramaetro a es mayor que el b.
if (compara_versiones ~= 1) then-- si la version no es mayor...
File.Delete(_TempFolder.."\\2.0.0.0.ini", false, false, true, nil);
Label.SetText("Label1", "Posees la Última versión!!!");
Application.Sleep(500);
Page.Jump("logeo");
else
Label.SetText("Label1", "Actualizacion Disponible!!!");
Application.Sleep(500);
Label.SetVisible("Label1", false);
Paragraph.SetText("Paragraph1", "Descargando actualizaciones...");
Progress.SetVisible("Progress1", true);
function DownloadCallback (nDownloaded, nTotal, TransferRate, SecondLeft, SecondsLeftFormat, Message)
sDownloaded = String.GetFormattedSize(nDownloaded, FMTSIZE_AUTOMATIC, true);
sTotal = String.GetFormattedSize(nTotal, FMTSIZE_AUTOMATIC, true);
Paragraph.SetText("Paragraph1", "Tiempo Restante: "..SecondsLeftFormat.."\n \nDescargado: " .. sDownloaded .. " / " .. sTotal);
nPos=(nDownloaded / nTotal) * 65534
Progress.SetCurrentPos("Progress1",nPos );
return true
end
Progress.SetRange("Progress1", 0, 65534);
url_actualizador = INIFile.GetValue(_TempFolder.."\\2.0.0.0.ini", "Datos Juego", "Url Actualizador");
HTTP.Download(url_actualizador, _TempFolder.."\\2.0.0.0.zip", MODE_BINARY, 10, 80, nil, nil, DownloadCallback);
error11 = Application.GetLastError();
StatusDlg.Hide();
if error11 ~= 0 then
Paragraph.SetVisible("Paragraph1", false);
Progress.SetVisible("Progress1", false);
Web.SetVisible("Web1", false);
Web.SetVisible("Web2", true);
Dialog.Message("Error de Descarga - K10003", "Ocurrio un error descargando el instalador actualizador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
md5_actualizador1 = Crypto.MD5DigestFromFile(_TempFolder.."\\2.0.0.0.zip");
md5_actualizador2 = INIFile.GetValue(_TempFolder.."\\2.0.0.0.ini", "Datos Juego", "MD5 Actualizador");
if (md5_actualizador1 == md5_actualizador2) then
File.Delete(_TempFolder.."\\2.0.0.0.ini", false, false, false, nil);
if (Application.GetLastError() ~= 0) then
Dialog.Message("Error de Borrado - K20003", "Ocurrio un error borrando el archivo verificador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
Paragraph.SetText("Paragraph1", "Instalando Actualización...");
function ZipCallback (String, Parcent, Status)
Progress.SetCurrentPos("Progress1", Parcent);
return true
end
Zip.Extract(_TempFolder.."\\2.0.0.0.zip", {"*.*"}, _SourceFolder , true, true, "miotraclavexD", ZIP_OVERWRITE_ALWAYS, ZipCallback);
error12 = Application.GetLastError();
StatusDlg.Hide();
if error12 ~= 0 then
Dialog.Message("Error de Extracción - K20002", "Ocurrio un error actualizando el sistema\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
File.Delete(_TempFolder.."\\2.0.0.0.zip", false, false, false, nil);
if (Application.GetLastError() ~= 0) then
Dialog.Message("Error de Borrado - K20004", "Ocurrio un error borrando el zip actualizador\nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
File.Delete(_TempFolder.."\\2.0.0.0.ini", false, false, true, nil);
Paragraph.SetText("Paragraph1", "Actualizacion Completa!!!");
Application.Exit();
end
end
end
else
Dialog.Message("Error de Verificación - K20001", "Se a detecta que el zip actualizador que se ha descargado\nno es el correcto para la versión que tienes actualmente\n \nCierra el Juego y abrelo otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
end
end
end
end
end
end
end
end
end
end
else
Dialog.Message("Error de Verificación - K30002", "Ocurrio un error verificando si hay actualizaciones disponibles,\nposiblemente el servidor maestro se este actualizando,\n \n Intentelo nuevamente en unos 5 minutos...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Application.Exit(0);
end
Y este en "On Close"
busca_reinicio = File.Find(_SourceFolder, "reinicio_kk.ini", false, false, nil, nil);
if (busca_reinicio) then
File.Delete(_SourceFolder.."\\reinicio_kk.ini", false, false, false, nil);
error1 = Application.GetLastError();
if (error1 ~=0) then
Dialog.Message("Error de Borrado - N10002", "Ocurrio un error borrando el archivo reinicio_kk.ini, que es el que indica al sistema\nque el Juego debe reiniciarce, por favor borralo y abre el Juego otra vez...", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
File.ExploreFolder(_SourceFolder, SW_MAXIMIZE);
Application.Exit(0);
else
busca_actualizado = File.Find(_SourceFolder, "juego_actualizador.exe", false, false, nil, nil);
if (busca_actualizado) then
File.Run(_SourceFolder.."\\juego_actualizador.exe", "", "", SW_HIDE, false);
else
File.Run(_SourceFolder.."\\juego.exe", "", "", SW_SHOWNORMAL, false);
end
end
else
busca_actualizado2 = File.Find(_SourceFolder, "juego_actualizador.exe", false, false, nil, nil);
if (busca_actualizado2) then
File.Run(_SourceFolder.."\\juego_actualizador.exe", "", "", SW_HIDE, false);
end
end
Notece que mi programación es muy conservadora, osea que si no se cumple una regla, no seguirá el proceso, ya que si lo hiciera estaría siguiendo un camino sin terminar, eso siempre trato de hacer cuando programo. se que posiblemente este lleno de codigo sobrante, que se puede reducir "a lo pabloko", lo digo asi porque seguro biene pabloko y reduce las 300 lineas por tan solo 5

,
pero bueno en ese tiempo era bien novato y con el poco conocimiento que tenia, logré hacer esto
si les sirve para algo, que bueno!