Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.

Iniciado por Lordzito, 3 Marzo 2012, 19:12 PM

0 Miembros y 1 Visitante están viendo este tema.

Lordzito

Hola, pues no sabia como poner en la descripcion pero ojala me entiendan, pues tengo un actualizador el cual sirve para actualizar un programa que estoy haciendo, pues  lo que hice fue subi un archivo .txt nombrado "version.txt" a un servidor ejemplo a los de "miarroba.es" pues el actualizador lo que hace es  revisar el "version.txt" y ver si la version que contiene el .txt coincide con el numero interno del actualizador pues hast ahi esta bien, porque si el programa es la version "1.0" y en el archivo .txt subido al servidor esta en "1.0" pues en el actualizador salta un pop-up que dice que el "¡ No hay actualizaciones disponibles por el momento !"  pero si al version.txt le cambio a "2.0" pues al ejecutar el actualizador salta un pop-up y dice: "¡ ¡ ¡ Se ha encontrado una nueva actualización ! ! !" pues hasta ahi bien lo que pasa es que el actualizador solo detecta el ultimo numero osea si la version es "1.0" pues detecta solo el "0" y pues yo quiero que detecte el primer numero osea el "1", lo quiero de esa forma porque si solo detecta el ultimo numero pues al tener la version "1.0" y en la version.txt subida al servidor "2.0" pues ahi ya no actualizara porque detectara solo el ultimo numero y dira que el programa ya esta actualizado por eso es que quiero que detecte el primer digito y no se como, aki les dejo el code del modulo:

Código (vb) [Seleccionar]
Option Explicit
'#  Quitar Botón Cancelar#
Public Const MF_BYPOSITION = &H400
Public Const MF_REMOVE = &H1000
Public Declare Function DrawMenuBar Lib "user32" _
     (ByVal hwnd As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" _
     (ByVal hMenu As Long) As Long
Public Declare Function GetSystemMenu Lib "user32" _
       (ByVal hwnd As Long, _
       ByVal bRevert As Long) As Long
Public Declare Function RemoveMenu Lib "user32" _
       (ByVal hMenu As Long, _
       ByVal nPosition As Long, _
       ByVal wFlags As Long) As Long

'#####################################
'#  Progamado por Lordzito               #
'#  Version: 1.0                     #
'# Modulo para actualizar programas  #
'#####################################
'####### Apis!! ######################
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long
'#####################################
'####### editar estos valores ########
Const Version = "1.0" 'version del software actual
Const pagver = "http://lordsoft.webcindario.com/version.txt" 'la pagina web donde se encuentra la ultima version, este archivo tiene que contener el último número de versión
Const pagdown = "http://download.piriform.com/ccsetup316.exe" 'donde tengas el ejecutable actualizado
Const tipe = 1 'elegir opcion de descarga de actualizacion 1 = abrir dialogo de descarga 2 = descargar sin pedir confirmación y ejecutar (<- no es recomendado) 3 = abrir dialogo de descarga y cerrar programa
'#####################################
Const acc0 = "Modulo creado por Lordzito" 'ésto no hay que cambiar
Dim ERROR_SUCCESS
Dim sSourceUrl As String
Dim versionA As String

Private Function Descargar(ByVal link As String, ByVal slocalfile As String) As Boolean
 Descargar = URLDownloadToFile(0, StrReverse(link), slocalfile, 0, 0) = ERROR_SUCCESS
End Function

Private Function DownloadV(ByVal directory As String) As Boolean
sSourceUrl = StrReverse(directory)
Descargar StrReverse(StrReverse(sSourceUrl)), StrReverse(StrReverse(App.Path)) & "\" & UCase("Version.txt")
End Function

Private Function nestch()
nestch = " creado por "
End Function

Private Function steepA(ByVal directory As String) As Boolean
sSourceUrl = StrReverse(directory)
Descargar StrReverse(StrReverse(sSourceUrl)), StrReverse(StrReverse(App.Path)) & "\" & UCase("NV.exe")
End Function
Private Function verificar(ByVal verssion As String) As Boolean
On Error Resume Next
Dim lordzito As Integer
Dim Versver As String
lordzito = FreeFile
   Open StrReverse(StrReverse(App.Path)) & "\" & UCase("Version.txt") For Input As #lordzito
      Versver = Input(LOF(lordzito), #lordzito)
   Close #lordzito
   If Mid(acc0, 1, Len(acc0)) = sietch Then
       If Versver = Version Then
       MsgBox "  ¡ No hay actualizaciones disponibles por el momento !" & vbNewLine & "¡ ¡ ¡    ya está actualizado ! ! !", vbExclamation, "Actualización"
       Else
       Select Case MsgBox(" ¡ ¡ ¡ Se ha encontrado una nueva actualización ! ! ! " & vbNewLine & "Desea descargar automaticamente la nueva versión?", vbYesNo + vbInformation, "Actualización")
       Case vbYes
    'aca si presiono Si
       actualizar (tipe)
    'aca si presiono No
       Case vbNo
       End
       End Select
       End If
   Else
   MsgBox error25, vbCritical, "ERROR SOBRE DERECHOS DE AUTOR"
   End If
End Function
Private Function actualizar(ByVal streeng As String) As Boolean
If streeng = 1 Then
DoFileDownload StrConv(pagdown, vbUnicode)
ElseIf streeng = 2 Then
steepA (StrReverse(pagdown))
Shell (StrReverse(StrReverse(App.Path)) & "\" & UCase("NV.exe"))
ElseIf streeng = 3 Then
DoFileDownload StrConv(pagdown, vbUnicode)
End
End If
End Function

Public Function Buscar_Actualizacion()
Dim strp As Boolean
strp = DownloadV(pagver)
verificar (StrReverse(LCase(UCase(StrReverse(Version)))))
End Function

Private Function sietch()
Dim putus As String
putus = StrReverse("Modulo")
putus = StrReverse(putus) & nestch & "Lordzito"
sietch = putus
End Function

Private Function error25()
error25 = "El derecho de autor correspondiente a LORDZITO fue cambiado o eliminado"
End Function


Esta es la parte del Code que quiero arreglar
Código (vb) [Seleccionar]
Const Version = "1.0" 'version del software actual
Const pagver = "http://lordsoft.webcindario.com/version.txt" 'la pagina web donde se encuentra la ultima version, este archivo tiene que contener el último número de versión


O si saben de algun otro actualizador mejor escribanmelo porfa se los agradeceria !!!

Deeo Raiser

Hola Lordzito, como estas ?

Mira, la verdad es que no entendi mucho tu codigo, ademas es muy largo  :-\.
Por lo que me dispuse a hacer lo que estas tratando de hacer, esto es lo que me salio, espero que te sirva. :o

En el formulario:
    Label = lblVersion
    CommandButton = Command1


Código (vb) [Seleccionar]
Option Explicit
'Funcion API URLDownloadToFile
Private Declare Function URLDownloadToFile _
   Lib "urlmon" _
   Alias "URLDownloadToFileA" ( _
       ByVal pCaller As Long, _
       ByVal szURL As String, _
       ByVal szFileName As String, _
       ByVal dwReserved As Long, _
       ByVal lpfnCB As Long) As Long
       
'Variable donde colocaremos la version
Dim Version As String

Private Sub Command1_Click()
   Call Descargar("http://lordsoft.webcindario.com/version.txt")
End Sub

Sub Descargar(Url As String)

   'LLamamos a la APi de Win, y le pasamos los parametros, Url y la ruta de descarga ("C:/....")
   Call URLDownloadToFile(0, Url, "c:\Version.txt", 0, 0)
         
   'Una ves descargado lo abrimos de forma Binaria
   Open "c:\Version.txt" For Binary As 1#
        Version = Space(LOF(1))
        Get #1, , Version 'Cargamos la versión en la variable
   Close #1
   
   'No hace Falta Explicar
   lblVersion.Caption = Version
   
   'Eliminamos el achivo
   Kill ("c:\Version.txt")
End Sub


DESCARGAR CÓDIGO COMPLETO



"Recuerda siempre que tu propia  resolución de triunfar es mas importante que cualquier otra cosa."
Abraham Lincoln

Elemental Code

desofusca y sacale las comprobaciones redundantes a ver si se le cambio el derecho de autor y volvelo a poner.

El principal problema es que no estas usando bien el archivo txt por lo que parece.
Proba de la forma que dijo deeo raiser y no hagas trampas y comprobaciones. si liberas el codigo es mas que bobo que te pueden sacar la comprobacion de esa linea de derecho de autor ¬¬

Voy a hacerte el trabajo mas facil y voy a hacer un modulo




Aca esta

Código (vb) [Seleccionar]
Option Explicit
'PROOF OF CONCEPT / PRUEBA DE CONCEPTO
'ELEMENTAL CODE (Milton Candelero)
'5/3/2012 (dd/mm/aaaa)
'UPDATE MODULE / MODULO DE ACTUALIZACION
'En caso de uso y/o modificacion, respetar los creditos.
'Hecho para Lordzito ya que su version era fea, ineficiente, y tenia muchisimas comprobaciones de si le habian sacado una linea que decia "By lordzito" ¬¬


Const OldVer As Double = 666 'Version actual (solo admite formato x.x NO USAR FORMATOS COMO x.x.x.x)
Const URLVer As String = "URL del txt" 'url del txt
Const URLSetup As String = "URL del archivo" 'url del archivo
'EDITAR LAS CONSTANTES DE ARRIBA!!
'SINO ESTO NO VA A FUNCIONAR.
'***********************************************************
Dim NewVer As Double
Dim ff As Integer
Dim sVersion As String
'(USO DOUBLES para que si yo tengo la version 1.6 y el txt dice 1.5 no me obligue a actualizar)

'URLDownloadToFile es una de las formas mas feas de bajar un archivo, pero bueh, que se le va a hacer :P
Private Declare Function URLDownloadToFile _
    Lib "urlmon" _
    Alias "URLDownloadToFileA" ( _
        ByVal pCaller As Long, _
        ByVal szURL As String, _
        ByVal szFileName As String, _
        ByVal dwReserved As Long, _
        ByVal lpfnCB As Long) As Long

'Verifica y contesta TRUE si hay actualizaciones nuevas y FALSE si no las hay.
Public Function UpdateAvailable() As Boolean
    Call URLDownloadToFile(0, URLVer, "c:\Version.txt", 0, 0)
    ff = FreeFile
    Open "c:\Version.txt" For Binary As ff#
         sVersion = Space(LOF(1))
         Get #ff, , sVersion
    Close #ff
    NewVer = CDbl(sVersion)
    If NewVer > OldVer Then UpdateAvailable = True Else UpdateAvailable = False
End Function

'Descarga el archivo indicado en la constante "URLSetup"
Public Function DownloadSetup(Optional sPath As String = "c:\SETUP.exe")
    Call URLDownloadToFile(0, URLSetup, sPath, 0, 0)
End Function


No tiene msgbox (Cosa HORRIBLE para un modulo)
No tiene comprobaciones de derechos de autor (Estupido, si estas liberando el codigo :P)
Usa URLDownload to file (es mal forma de bajar archivos, pero funciona al efecto :P)
tiene dos metodos:

  • UpdateAvailable
Verifica el TXT y devuelbe true o false para que vos puedas decidir si preguntar al usuario o no sobre la actualizacion, o poner otro mensaje, o hacer lo que se te de la gana :D
  • DownloadSetup
Descarga el archivo de actualizacion adonde tu le digas o sino lo descarga automaticamente en C:\


ASI se hace un buen modulo ;)



edito una vez mas.
Creo que lo de poner constantes no es la mejor idea del mundo.
Podria ser todo pasado como parametro a la funcion.
Pero te deje eso para respetar un pooooquiiito del codigo original.

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Lordzito

Cita de: Deeo Raiser en  4 Marzo 2012, 01:05 AM
Código (vb) [Seleccionar]
Option Explicit
'Funcion API URLDownloadToFile
Private Declare Function URLDownloadToFile _
   Lib "urlmon" _
   Alias "URLDownloadToFileA" ( _
       ByVal pCaller As Long, _
       ByVal szURL As String, _
       ByVal szFileName As String, _
       ByVal dwReserved As Long, _
       ByVal lpfnCB As Long) As Long
       
'Variable donde colocaremos la version
Dim Version As String

Private Sub Command1_Click()
   Call Descargar("http://lordsoft.webcindario.com/version.txt")
End Sub

Sub Descargar(Url As String)

   'LLamamos a la APi de Win, y le pasamos los parametros, Url y la ruta de descarga ("C:/....")
   Call URLDownloadToFile(0, Url, "c:\Version.txt", 0, 0)
         
   'Una ves descargado lo abrimos de forma Binaria
   Open "c:\Version.txt" For Binary As 1#
        Version = Space(LOF(1))
        Get #1, , Version 'Cargamos la versión en la variable
   Close #1
   
   'No hace Falta Explicar
   lblVersion.Caption = Version
   
   'Eliminamos el achivo
   Kill ("c:\Version.txt")
End Sub


Muchas Gracias, Deeo Raiser!!! lo probe y esta bueno lo tomare en cuenta, Saludos

Lordzito

Hola, Deeo Raiser Gracias x responder y demasiadas gracias x el code que me pusistes lo voy a probar de verdad muchisisimas gracias y sobre esto que escribistes:

Cita de: Elemental Code en  5 Marzo 2012, 21:56 PM
desofusca y sacale las comprobaciones redundantes a ver si se le cambio el derecho de autor y volvelo a poner.
no hagas trampas y comprobaciones. si liberas el codigo es mas que bobo que te pueden sacar la comprobacion de esa linea de derecho de autor ¬¬

Pues hace tiempo yo hize varios actualizadores pero eran peroes de feos que el que postie y pues un amigo mio me dijo q me iva a ayudar a hacerme uno y pues el me hizo ese q puse y pues eso de derechos de autor y mi sobrenombre que tien pues lo hizo el no fui yo, y pues cuando puse el codigo aki para pedir ayuda, pues claro q pense en ponerlo o no ponerlo, pero al fin y al cabo este code era solo una prueba que me habian echo para tener ya un como campo de como haria lo demas y pues decidi ponerlo sin importar cualkier cosa y como andaba preciso no me acorde de kitar sikiera la lineas de derecho de autor que mi amigo le habia puesto y con mi sobre nombre "lordzito", xq tienes razon es algo obvio que si pongo que no cambien nada del code pues claro que mas rapido lo harán y diran que ellos lo han creado, pero este code solo era una prueba pues, claro q si fuera ya el code que ocuparia en si en mi programa q estoy creando pues no creo q lo liberara tan asi de facil, pero gracias x tus sugerencias y tomare mucho en cuenta lo q me dijistes para en otra vez no se me escape ya siendo un code mas oficial y a proposito veo q el q tu me pusistes esta muy bien echo y claro q lo utilizare y lo modificare pa ir mejorando mas y mas hasta dodne me guste de verdad muchisimas gracias Brother!!!

Edito: y a parte de "URLDownloadToFile" con que otra funcion me recomiendas descargar!!!

Elemental Code

creo que karcrack o cobein habian hecho un modulo que descargaba sin ninguna api.
Buscalo por aca, deberia estar :)

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

seba123neo

aparte la api URLDownloadToFile te traba la aplicacion hasta que termine de descargar, el mejor metodo que he visto es usar descarga asincrona (la de cobein) que usa un usercontrol, dentro de los usercontrol hay un método llamado AsyncRead que sirve para descargar archivos de manera asincrona y no se te traba la aplicacion y de paso tambien tiene unos eventos para poder saber el progreso de la descarga, y cuando termina.

ejemplo:

1 - Método AsyncRead

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson