Autor
|
Tema: InnoSetup: Problemas para comparar versiones (Solucionado) (Leído 4,540 veces)
|
DeXon18
Desconectado
Mensajes: 25
|
Hola buenas tardes, llevo unos días comiéndome la cabeza... Lo que quiero hacer es que cuando ejecuto el setup, comprueba las nuevas actualizaciones. 1) si no hay una nueva actualización, no mostrar ningún mensaje. 2) y si hay una nueva actualización, aparece un mensaje preguntando si desea descargarlo y que lleve a una web o no. El codigo de pascal es este: function DownloadFile(const AURL: string; var AResponse: string): Boolean; var WinHttpRequest: Variant; begin Result := True; try WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1'); WinHttpRequest.Open('GET', AURL, False); WinHttpRequest.Send; AResponse := WinHttpRequest.ResponseText; except Result := False; AResponse := GetExceptionMessage; end; end; procedure InitializeWizard; var DxLastVersion: string; begin if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion) then MsgBox(DxLastVersion, mbInformation, MB_YESNO) else MsgBox(DxLastVersion, mbError, MB_OK) end;
Sobre la versión he leído por hay que al ser x.x.x parece mas complejo el código ya me da lo mismo que sea así que sea xxx Espero que alguien pueda ayudarme se lo agradecería en el alma de verdad. Un saludo y mil gracias de antemano.
|
|
« Última modificación: 9 Marzo 2014, 21:46 pm por DeXon18 »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
Sugerencia:
En una sección que está dedicada a todos los lenguajes en general, al menos podrías especificar que el lenguaje del que trata el post es Pascal, en un comentario o en un Tag, ya que no todos saben distinguir la sintaxis, y abrir un post sin saber de que lenguaje se habla es hacer perder el tiempo a todos los demás.
Sobre lo de 'el Setup', te digo lo mismo, ¿que Setup, que archivo de instalación, eso que es?, ¿acaso te refieres a un InstallBuilder ...InnoSetup por ejemplo?, ¡pues dilo!.
Saludos!
|
|
« Última modificación: 9 Marzo 2014, 20:42 pm por Eleкtro »
|
En línea
|
|
|
|
DeXon18
Desconectado
Mensajes: 25
|
Sugerencia:
En una sección que está dedicada a todos los lenguajes en general, al menos podrías especificar que el lenguaje del que trata el post es Pascal, en un comentario o en un Tag, ya que no todos saben distinguir la sintaxis, y abrir un post sin saber de que lenguaje se habla es hacer perder el tiempo a todos los demás.
Sobre lo de 'el Setup', te digo lo mismo, ¿que Setup, que archivo de instalación, eso que es?, ¿acaso te refieres a un InstallBuilder ...InnoSetup por ejemplo?, ¡pues dilo!.
Saludos!
Tienes dota la razón ya esta comentado para que no haya lios, Sorry
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
Aquí tienes un método de uso genérico para comparar una versión: // This function compares version string // return -1 if ver1 < ver2 // return 0 if ver1 = ver2 // return 1 if ver1 > ver2 function CompareVersion( ver1, ver2: String ) : Integer; var verint1, verint2: array of Integer; i: integer; begin SetArrayLength( verint1, 4 ); DecodeVersion( ver1, verint1 ); SetArrayLength( verint2, 4 ); DecodeVersion( ver2, verint2 ); Result := 0; i := 0; while ( (Result = 0) and ( i < 4 ) ) do begin if verint1[i] > verint2[i] then Result := 1 else if verint1[i] < verint2[i] then Result := -1 else Result := 0; i := i + 1; end; end;
A eso deberías pasarle el String de la versión que te descargas, y la propiedad 'AppVersion' Del ISS. Saludos
|
|
« Última modificación: 9 Marzo 2014, 21:05 pm por Eleкtro »
|
En línea
|
|
|
|
DeXon18
Desconectado
Mensajes: 25
|
Aquí tienes un método de uso genérico para comparar una versión:
Gracias Elektro por la respuesta, mi pega esta cuando intento juntar esos 2 scripts que no se como hacerlo
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
mi pega esta cuando intento juntar esos 2 scripts que no se como hacerlo
No manejo Pascal, espera la respuesta de alguien que sepa más que yo, pero de todas formas sería algo así: const // La constante de la versión actual. AppVer = 1.0; begin // Si el archivo se descarga corréctamente... if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion) then // comparo el string de la version descargada, con la version actual... // return 1 if ver1 > ver2 if CompareVersion(DxLastVersion, AppVer) = 1 then // Se ha encontrado una versión más actualizada, hacer lo que quieras... // Code goes here. else // Estás usando la versión más reciente. // Do nothing. end; end;
|
|
« Última modificación: 9 Marzo 2014, 21:21 pm por Eleкtro »
|
En línea
|
|
|
|
DeXon18
Desconectado
Mensajes: 25
|
No manejo Pascal, espera la respuesta de alguien que sepa más que yo, pero de todas formas sería algo así: const // La constante de la versión actual. AppVer = 1.0; begin // Si el archivo se descarga corréctamente... if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion) then // comparo el string de la version descargada, con la version actual... // return 1 if ver1 > ver2 if CompareVersion(DxLastVersion, AppVer) = 1 then // Se ha encontrado una versión más actualizada, hacer lo que quieras... // Code goes here. else // Estás usando la versión más reciente. // Do nothing. end; end;
Gracias por la inspiración Elektro, te debo una buena cerveza !! El codigo seria este: function DownloadFile(const AURL: string; var AResponse: string): Boolean; var WinHttpRequest: Variant; begin Result := True; try WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1'); WinHttpRequest.Open('GET', AURL, False); WinHttpRequest.Send; AResponse := WinHttpRequest.ResponseText; except Result := False; AResponse := GetExceptionMessage; end; end; procedure DecodeVersion( verstr: String; var verint: array of Integer ); var i,p: Integer; s: string; begin // initialize array verint := [0,0,0,0]; i := 0; while ( (Length(verstr) > 0) and (i < 4) ) do begin p := pos('.', verstr); if p > 0 then begin if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 ); verint[i] := StrToInt(s); i := i + 1; verstr := Copy( verstr, p+1, Length(verstr)); end else begin verint[i] := StrToInt( verstr ); verstr := ''; end; end; end; function CompareVersion( ver1, ver2: String ) : Integer; var verint1, verint2: array of Integer; i: integer; begin SetArrayLength( verint1, 4 ); DecodeVersion( ver1, verint1 ); SetArrayLength( verint2, 4 ); DecodeVersion( ver2, verint2 ); Result := 0; i := 0; while ( (Result = 0) and ( i < 4 ) ) do begin if verint1[i] > verint2[i] then Result := 1 else if verint1[i] < verint2[i] then Result := -1 else Result := 0; i := i + 1; end; end; function GetDeXVersion(): String; var DeXVersion: String; begin DeXVersion := ''; DownloadFile('http://www.laurl.com/latestver.txt', DeXVersion ); Result := DeXVersion; end; function InitializeSetup(): Boolean; begin if CompareVersion(GetDeXVersion(), '3.3.6') > 0 then begin Result := MsgBox('Se ha encontrado una version mas?',mbConfirmation, MB_YESNO) = idYes; if Result = False then MsgBox('Aqui mensaje para ir a la url o donde sea', mbInformation, MB_OK); end else Result := true; end;
Un saludo y gracias de nuevo
|
|
« Última modificación: 9 Marzo 2014, 21:46 pm por DeXon18 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
comparar horas, fechas..... C# (solucionado)
.NET (C#, VB.NET, ASP)
|
skan
|
3
|
30,581
|
24 Noviembre 2008, 10:42 am
por skan
|
|
|
Problema al comparar variable de valor string con letra SOLUCIONADO
Scripting
|
<ИΘZIЭ(ŦB>
|
4
|
7,099
|
23 Agosto 2009, 01:47 am
por leogtz
|
|
|
Comparar Base de datos MySQL (Solucionado)
Bases de Datos
|
elecktra
|
4
|
12,787
|
22 Noviembre 2009, 23:17 pm
por elecktra
|
|
|
[Solucionado]Versiones ligeras sin entorno grafico para virtualbox,linux ,ubuntu
GNU/Linux
|
Anonymous250
|
6
|
12,811
|
18 Octubre 2012, 18:15 pm
por maraet
|
|
|
SOLUCIONADO - Comparar 3 variables
PHP
|
WiseHidden
|
6
|
6,352
|
26 Septiembre 2013, 17:21 pm
por 1mpuls0
|
|