elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  InnoSetup: Problemas para comparar versiones (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: InnoSetup: Problemas para comparar versiones (Solucionado)  (Leído 4,596 veces)
DeXon18

Desconectado Desconectado

Mensajes: 25


Ver Perfil
InnoSetup: Problemas para comparar versiones (Solucionado)
« en: 9 Marzo 2014, 19:47 pm »

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:
Código
  1. function DownloadFile(const AURL: string; var AResponse: string): Boolean;
  2. var
  3.  WinHttpRequest: Variant;
  4. begin
  5.  Result := True;
  6.  try
  7.    WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  8.    WinHttpRequest.Open('GET', AURL, False);
  9.    WinHttpRequest.Send;
  10.    AResponse := WinHttpRequest.ResponseText;
  11.  except
  12.    Result := False;
  13.    AResponse := GetExceptionMessage;
  14.  end;
  15. end;
  16.  
  17. procedure InitializeWizard;
  18. var
  19.  DxLastVersion: string;
  20.  
  21. begin
  22.  if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion)  then
  23.    MsgBox(DxLastVersion, mbInformation, MB_YESNO)
  24.  else
  25.    MsgBox(DxLastVersion, mbError, MB_OK)
  26. 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
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Problemas para comparar versiones
« Respuesta #1 en: 9 Marzo 2014, 20:36 pm »

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 Desconectado

Mensajes: 25


Ver Perfil
Re: Problemas para comparar versiones
« Respuesta #2 en: 9 Marzo 2014, 20:50 pm »

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
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: InnoSetup: Problemas para comparar versiones
« Respuesta #3 en: 9 Marzo 2014, 21:02 pm »

Aquí tienes un método de uso genérico para comparar una versión:

Código
  1. // This function compares version string
  2. // return -1 if ver1 < ver2
  3. // return  0 if ver1 = ver2
  4. // return  1 if ver1 > ver2
  5. function CompareVersion( ver1, ver2: String ) : Integer;
  6. var
  7.  verint1, verint2: array of Integer;
  8.  i: integer;
  9. begin
  10.  
  11.  SetArrayLength( verint1, 4 );
  12.  DecodeVersion( ver1, verint1 );
  13.  
  14.  SetArrayLength( verint2, 4 );
  15.  DecodeVersion( ver2, verint2 );
  16.  
  17.  Result := 0; i := 0;
  18.  while ( (Result = 0) and ( i < 4 ) ) do
  19.  begin
  20.   if verint1[i] > verint2[i] then
  21.    Result := 1
  22.   else
  23.      if verint1[i] < verint2[i] then
  24.      Result := -1
  25.    else
  26.      Result := 0;
  27.  
  28.   i := i + 1;
  29.  end;
  30.  
  31. 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 Desconectado

Mensajes: 25


Ver Perfil
Re: InnoSetup: Problemas para comparar versiones
« Respuesta #4 en: 9 Marzo 2014, 21:04 pm »

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
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: InnoSetup: Problemas para comparar versiones
« Respuesta #5 en: 9 Marzo 2014, 21:12 pm »

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í:

Código
  1. const
  2.  // La constante de la versión actual.
  3.  AppVer = 1.0;
  4.  
  5. begin
  6. // Si el archivo se descarga corréctamente...
  7. if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion)  then
  8.  
  9.    // comparo el string de la version descargada, con la version actual...  // return 1 if ver1 > ver2
  10.    if CompareVersion(DxLastVersion, AppVer) = 1 then
  11.      // Se ha encontrado una versión más actualizada, hacer lo que quieras...
  12.      // Code goes here.
  13.  
  14.    else
  15.      // Estás usando la versión más reciente.
  16.      // Do nothing.
  17.  
  18.    end;
  19.  
  20. end;
« Última modificación: 9 Marzo 2014, 21:21 pm por Eleкtro » En línea



DeXon18

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: InnoSetup: Problemas para comparar versiones
« Respuesta #6 en: 9 Marzo 2014, 21:16 pm »

No manejo Pascal, espera la respuesta de alguien que sepa más que yo, pero de todas formas sería algo así:

Código
  1. const
  2.  // La constante de la versión actual.
  3.  AppVer = 1.0;
  4.  
  5. begin
  6. // Si el archivo se descarga corréctamente...
  7. if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion)  then
  8.  
  9.    // comparo el string de la version descargada, con la version actual...  // return 1 if ver1 > ver2
  10.    if CompareVersion(DxLastVersion, AppVer) = 1 then
  11.      // Se ha encontrado una versión más actualizada, hacer lo que quieras...
  12.      // Code goes here.
  13.  
  14.    else
  15.      // Estás usando la versión más reciente.
  16.      // Do nothing.
  17.  
  18.    end;
  19.  
  20. end;

Gracias por la inspiración Elektro, te debo una buena cerveza !!

El codigo seria este:
Código
  1. function DownloadFile(const AURL: string; var AResponse: string): Boolean;
  2. var
  3.  WinHttpRequest: Variant;
  4. begin
  5.  Result := True;
  6.  try
  7.    WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  8.    WinHttpRequest.Open('GET', AURL, False);
  9.    WinHttpRequest.Send;
  10.    AResponse := WinHttpRequest.ResponseText;
  11.  except
  12.    Result := False;
  13.    AResponse := GetExceptionMessage;
  14.  end;
  15. end;
  16.  
  17. procedure DecodeVersion( verstr: String; var verint: array of Integer );
  18. var
  19.  i,p: Integer; s: string;
  20. begin
  21.  // initialize array
  22.  verint := [0,0,0,0];
  23.  i := 0;
  24.  while ( (Length(verstr) > 0) and (i < 4) ) do
  25.  begin
  26.   p := pos('.', verstr);
  27.   if p > 0 then
  28.   begin
  29.      if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 );
  30.    verint[i] := StrToInt(s);
  31.    i := i + 1;
  32.    verstr := Copy( verstr, p+1, Length(verstr));
  33.   end
  34.   else
  35.   begin
  36.    verint[i] := StrToInt( verstr );
  37.    verstr := '';
  38.   end;
  39.  end;
  40.  
  41. end;
  42.  
  43. function CompareVersion( ver1, ver2: String ) : Integer;
  44. var
  45.  verint1, verint2: array of Integer;
  46.  i: integer;
  47. begin
  48.  
  49.  SetArrayLength( verint1, 4 );
  50.  DecodeVersion( ver1, verint1 );
  51.  
  52.  SetArrayLength( verint2, 4 );
  53.  DecodeVersion( ver2, verint2 );
  54.  
  55.  Result := 0; i := 0;
  56.  while ( (Result = 0) and ( i < 4 ) ) do
  57.  begin
  58.   if verint1[i] > verint2[i] then
  59.    Result := 1
  60.   else
  61.      if verint1[i] < verint2[i] then
  62.      Result := -1
  63.    else
  64.      Result := 0;
  65.  
  66.   i := i + 1;
  67.  end;
  68.  
  69. end;
  70.  
  71.  
  72. function GetDeXVersion(): String;
  73. var
  74.  DeXVersion:  String;
  75. begin
  76.  DeXVersion := '';
  77.  DownloadFile('http://www.laurl.com/latestver.txt', DeXVersion );
  78.  Result := DeXVersion;
  79. end;
  80.  
  81.  
  82. function InitializeSetup(): Boolean;
  83. begin
  84.  if CompareVersion(GetDeXVersion(), '3.3.6') > 0 then
  85.  begin
  86.    Result := MsgBox('Se ha encontrado una version mas?',mbConfirmation, MB_YESNO) = idYes;
  87.    if Result = False then
  88.      MsgBox('Aqui mensaje para ir a la url o donde sea', mbInformation, MB_OK);
  89.  end
  90.  else
  91.    Result := true;
  92. end;

Un saludo y gracias de nuevo
« Última modificación: 9 Marzo 2014, 21:46 pm por DeXon18 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
comparar horas, fechas..... C# (solucionado)
.NET (C#, VB.NET, ASP)
skan 3 30,629 Último mensaje 24 Noviembre 2008, 10:42 am
por skan
Problema al comparar variable de valor string con letra SOLUCIONADO
Scripting
<ИΘZIЭ(ŦB> 4 7,145 Último mensaje 23 Agosto 2009, 01:47 am
por leogtz
Comparar Base de datos MySQL (Solucionado)
Bases de Datos
elecktra 4 12,809 Último mensaje 22 Noviembre 2009, 23:17 pm
por elecktra
[Solucionado]Versiones ligeras sin entorno grafico para virtualbox,linux ,ubuntu
GNU/Linux
Anonymous250 6 13,000 Último mensaje 18 Octubre 2012, 18:15 pm
por maraet
SOLUCIONADO - Comparar 3 variables
PHP
WiseHidden 6 6,382 Último mensaje 26 Septiembre 2013, 17:21 pm
por 1mpuls0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines