Página 1 de 1

ACUTALIZADOR DE PROGRAMA VIA WEB

Publicado: 17 Sep 2013, 09:41
por arzo
Que tal amigos creo que no hay algo como esto ya publicado en este foro, les explico

Este es un programita que checa una web y ve su contenido, que en teoria solo puede ser dos cosas (1 ó 2) 1 significa que esta activa una actualización y 2 que no hay disponible ninguna actualizacion, tambien esta por default el codigo (0) que es error al conectarse a la web de verificacion.

si el programa detecta que hay actualizacion, la busca y la descarga de la web en formato .osc y la copia en la carpeta seleccionada y la renombra a formato .san

pero espero lo vean ustedes mismos, analisen el codigo y me digan de que manera lo podemos mejorar:

Código: Seleccionar todo

#include <inet.au3>

Func _InetIniRead($s_url, $v_section, $v_key, $v_default = -1)
    If $v_default = -1 Or $v_default = Default Then $v_default = ""
    Local $s_text = _INetGetSource($s_url)
    If $s_text = "" Then Return SetError(1, 0, $v_default)
    $s_text = @CRLF & $s_text & @CRLF
    $v_section = StringStripWS($v_section, 7)
    Local $a_data = StringRegExp($s_text, "(?s)(?i)\n\s*\[\s*" & $v_section & "\s*\]\s*\r\n(.*?)(?m:\[|\z)", 3)
    If IsArray($a_data) = 0 Then Return SetError(2, 0, $v_default)
    Local $a_read = StringRegExp(@LF & $a_data[0], "(?s)(?i)\n\s*" & $v_key & "\s*=(.*?)\r", 1)
    If IsArray($a_read) = 0 Then Return SetError(3, 0, $v_default)
    Return $a_read[0]
EndFunc


$file = _InetIniRead("http://tuwebsite.com/updates/status.ini", "update", "01")
ConsoleWrite($file & @CRLF)


; Cheque si el fichero abierto es leído correctamente
If $file = 0 Then ;simboliza error en la función inetiniread se ocasiona si no logra leer el archivo
   MsgBox(16, "Error", "No se pudo conectar con el servidor")
   Exit

ElseIf $file = 2 Then ;simboliza que no hay actualizaciones
   MsgBox(16, "Error", "No hay actualizaciones disponibles")
   Exit

ElseIf $file = 1 Then ;simboliza que si hay actualizaciones y procede a descargarla e instalarla
Local $hDownload = InetGet("http://tuwebsite.com/updates/update.osc", @AppDataDir & "\Thinstall\config\update.osc", 1, 1)
Do
    Sleep(250)
Until InetGetInfo($hDownload, 2) ; Revisa si la descarga ya termino.
Local $nBytes = InetGetInfo($hDownload, 0)
InetClose($hDownload) ; Cierra.
FileDelete(@AppDataDir & "\Thinstall\config\update.san") ; borra la anterior actualizacion
FileMove(@AppDataDir & "\Thinstall\config\update.osc", @AppDataDir & "\Thinstall\config\update.san", 9); renombra de .osc a .san
MsgBox(0, "ACTUALIZACION EXITOSA", "Se descargo la actualización exitosamente, total descargado: " & $nBytes & "Bytes")
	EndIf

CODIGO DEL INI status.ini

Código: Seleccionar todo

[update]
01=1
EXITOS Y ESTARE ESPERANDO COMENTARIOS O MODIFICACIONES PARA HACERLO MAS INTERESANTE.

Re: ACUTALIZADOR DE PROGRAMA VIA WEB

Publicado: 17 Sep 2013, 23:21
por arkcrew
Buenas,

Es muy interesante, yo mismo implementé una bastante más compleja para mis programas, una pregunta

Supongamos que descargas la versión más reciente, pero aún hay gente que utiliza la antigua, por lo que en la web debe aparecer que existe una actualización, de ser así, aunque tengas la última versión seguirá diciendo que existe una actualización no? Vamos, creo que eso puede pasar. Por eso, lo que yo hago es control por versiones, en vez de 0 o 1 o lo que sea, posteo la última versión, ejemplo 4.2, el programa obtiene ese dato y compara si la que tiene el es menor (entonces dice que hay updates) o si es la misma, por tanto no dice nada.

Quizás sea interesante que sepas eso!

Saludos!