Título: Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.
Publicado por: Lordzito en 3 Marzo 2012, 19:12 pm
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: 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 arreglarConst 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 !!!
Título: Re: Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.
Publicado por: Deeo Raiser en 4 Marzo 2012, 01:05 am
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 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 (http://www.4shared.com/rar/7RpIGmr2/Verificar_Version.html)
Título: Re: Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.
Publicado por: 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. 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 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: 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 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.
Título: Re: Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.
Publicado por: Lordzito en 6 Marzo 2012, 07:54 am
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
Título: Re: Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.
Publicado por: Lordzito en 6 Marzo 2012, 07:54 am
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: 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!!!
Título: Re: Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.
Publicado por: Elemental Code en 6 Marzo 2012, 16:29 pm
creo que karcrack o cobein habian hecho un modulo que descargaba sin ninguna api. Buscalo por aca, deberia estar :)
Título: Re: Hacer que actualizador creado en VB6 detecte versiones pero el primer digito.
Publicado por: seba123neo en 10 Marzo 2012, 23:20 pm
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 (http://www.recursosvisualbasic.com.ar/htm/tutoriales/tips-ocx-2.htm#AsyncRead)
saludos.
|