ACUTALIZADOR DE PROGRAMA VIA WEB

y programas personales para otros como tu, puede que te corrijan ;)
Responder
arzo
Mensajes: 5
Registrado: 31 Ago 2013, 04:04

ACUTALIZADOR DE PROGRAMA VIA WEB

Mensaje 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.
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Re: ACUTALIZADOR DE PROGRAMA VIA WEB

Mensaje 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!
Responder