Excelente amigo, muchas gracias 

Bueno, por hoy ya he terminado, te explico hasta donde he llegado:
Tengo finalizado el programa para generar automáticamente el updater.lst, básicamente tú le indicas la carpeta donde tienes instalado el programa actualizado y te genera un fichero con el siguiente contenido:
vb6.jpg
151089
$7764735F
whatsnew.txt
51
$54FF24BD
windowslogo.png
151053
$A07BF49A
fotos\executable.jpg
94423
$F7F46B42
fotos\foto_linux.jpeg
81570
$A2963B48
hola\virusfoto.jpg
114480
$3B9600A0
No tienes que editarlo a mano, ya que el programa te lo calcula automáticamente, aparece el fichero y su ruta, tamaño y el CRC32, con esas 3 datos ya funciona correctamente el updater.
Y luego, el programa (actualizador principal) funciona d ela siguiente manera; se descarga el updater.lst y lee el fichero de 3 en 3 líneas, en cada lectura obtiene el fichero, tamaño y CRC, los compara con el fichero local y si uno de los 3 datos no es correcto, descarga la copia del fichero en remoto (el fichero actualizado). Si el fichero está dentro de una carpeta, también crea la carpeta y actualiza los ficheros de su interior.
** Por el momento el programa trabaja con los ficheros de la raíz y un 1º nivel de sub-carpeta, mañana cuando vuelva del trabajo hago un bucle recursivo para que pueda ir desde el nivel 2 de sub-carpeta hasta el nivel N (infinito).
El programa acepta el parámetro /auto para que auto-actualice y si descarga el fichero whatsnew.txt lo ejecuta y lo muestra al usuario para que vea los cambios actualizados.
El programa sirve como WebInstaller o Actualizador, puede actualizar incluso si la aplicación principal está en ejecución. Cosas que me faltan terminar?
- Nivel N-Subcarpeta (mañana lo termino)
- Posibilidad de auto-actualizar el propio instalador. (No se hasta que punto es interesante implementar la opción...)
El código es "bonito", corto y sencillo. Como a mi me gustan, es el siguiente:
- Function StartUpdate() 
-     Dim RootPath As String 
-     Dim WhatsNew As Boolean 
-   
-     Set Files = CreateObject("Scripting.FileSystemObject") 
-     WhatsNew = False 
-     m_CRC.Algorithm = 1 
-   
-     Open App.Path & "\smart.cfg" For Input As #1 
-         Line Input #1, RootPath 
-     Close #1 
-     DoEvents 
-   
-     If DownloadFile(RootPath & "updater.lst", "updater.lst") = False Then 
-         MsgBox "Error al descargar el fichero de actualización" 
-     Else 
-         Open App.Path & "\updater.lst" For Input As #1 
-             Do While Not EOF(1) 
-                 Line Input #1, Archivo 
-                 Line Input #1, Bytes 
-                 Line Input #1, CRC 
-                 Label1.Caption = Archivo & " (" & Bytes & ") = " & CRC 
-                 If Files.FileExists(App.Path & "\" & Archivo) Then 
-                     If FileLen(App.Path & "\" & Archivo) = Bytes Then 
-                         CRC2 = "$" & Hex(m_CRC.CalculateFile(App.Path & "\" & Archivo)) 
-                         If CRC <> CRC2 Then 
-                             Call DownloadFile(RootPath & Archivo, Archivo) 
-                             If Archivo = "whatsnew.txt" Then WhatsNew = True 
-                         End If 
-                     Else 
-                         Call DownloadFile(RootPath & Archivo, Archivo) 
-                         If Archivo = "whatsnew.txt" Then WhatsNew = True 
-                     End If 
-                 Else 
-                     Call DownloadFile(RootPath & Archivo, Archivo) 
-                     If Archivo = "whatsnew.txt" Then WhatsNew = True 
-                 End If 
-                 DoEvents 
-             Loop 
-         Close #1 
-         DoEvents 
-         Kill App.Path & "\updater.lst" 
-         If WhatsNew = True Then ShellExecuteA 0&, "Open", App.Path & "\whatsnew.txt", vbNullString, vbNullString, 1 
-     End If 
- End Function 
-   
- Function DownloadFile(ByVal URL As String, ByVal Target As String) As Boolean 
-     On Error GoTo dError 
-   
-     Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") 
-     Set oStream = CreateObject("ADODB.Stream") 
-   
-     URL = Replace(URL, "\", "/") 
-     oHTTP.Open "GET", URL, False 
-     oHTTP.Send 
-   
-     If (oHTTP.Status = 200) Then 
-         oStream.Open 
-         oStream.Type = 1 
-         oStream.Write oHTTP.ResponseBody 
-         If InStr(Target, "\") > 0 And Target <> "updater.lst" Then 
-             Call MkDir(Split(Target, "\")(0)) 
-         End If 
-         oStream.SaveToFile App.Path & "\" & Target, 2 
-         oStream.Close 
-         DownloadFile = True 
-         Exit Function 
-     End If 
- dError: 
-     DownloadFile = False 
- End Function 
-   
Por cierto, como has pensado en pagarme el trabajo que estoy haciendo? Yo no programo gratis... te mando un MP informando de mis precios por horas.
Saludos y hasta mañana! 
