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.
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!
Cita de: Eleкtro 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!
Tienes dota la razón ya esta comentado para que no haya lios, Sorry :-(
Aquí tienes un método de uso genérico para comparar una versión:
Cita de: http://www.vincenzo.net/isxkb/index.php?title=DirectX_-_How_to_detect_DirectX_version// 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
Cita de: Eleкtro en 9 Marzo 2014, 21:02 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
Cita de: DeXon18 en 9 Marzo 2014, 21:04 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í:
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;
Cita de: Eleкtro en 9 Marzo 2014, 21:12 PM
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