Zjarek napisał(a)
co będzie gdy program ma wersję 2.0.0 a do aktualizacji próbujesz wziąć 1.4.1.
Niejasno sformułowałeś odpowiedź... Myślę, że chodzi Ci o to, że co będzie, gdy aplikacja na dysku jest w wersji np. 2.0.0
, a najnowsza wersja aplikacji na serwerze ma numer np. 1.4.1
; Taka sytuacja nie może zaistnieć, bo skąd się na dysku wzięła nowsza, niż jest na serwerze? Trochę to dziwne, w każdym razie sprzeczne;
Ja dawno temu napisałem prosty programik do porównywania wersji (ale w delphi
...) i działa, tyle że format identyfikatora jest inny (taki jak w kompilatorze - Major, Minor, Release i Build); Działa zawsze tak, jak powinna, poniżej kod w delphi
:
program CanUpdateApp;
{$APPTYPE CONSOLE}
const
AV_MAJOR = 0;
AV_MINOR = 1;
AV_RELEASE = 2;
AV_BUILD = 3;
type
TAppVersionInfo = array [AV_MAJOR .. AV_BUILD] of Word;
procedure CompleteVersionInfo(var Ver: TAppVersionInfo;
const Major, Minor, Release, Build: Word);
begin
Ver[AV_MAJOR] := Major;
Ver[AV_MINOR] := Minor;
Ver[AV_RELEASE] := Release;
Ver[AV_BUILD] := Build;
end;
function CanUpdate(AppVer, UpdVer: TAppVersionInfo): Boolean;
begin
Result := (AppVer[AV_MAJOR] < UpdVer[AV_MAJOR]) or
(AppVer[AV_MINOR] < UpdVer[AV_MINOR]) or
(AppVer[AV_RELEASE] < UpdVer[AV_RELEASE]) or
(AppVer[AV_BUILD] < UpdVer[AV_BUILD]);
end;
var
AppVer,
UpdVer: TAppVersionInfo;
begin
CompleteVersionInfo(AppVer, 1, 0, 0, 0);
CompleteVersionInfo(UpdVer, 1, 0, 0, 0);
WriteLn('Application Version: ', AppVer[AV_MAJOR], '.', AppVer[AV_MINOR], '.',
AppVer[AV_RELEASE], '.', AppVer[AV_BUILD]);
WriteLn('Update Version: ', UpdVer[AV_MAJOR], '.', UpdVer[AV_MINOR], '.',
UpdVer[AV_RELEASE], '.', UpdVer[AV_BUILD]);
WriteLn;
case CanUpdate(AppVer, UpdVer) of
True: Write('New version available!');
False: Write('You have the lastest version.');
end;
ReadLn;
end.
Jak chcesz przetestować to przetłumacz na C++
(funkcja CanUpdate
);