Немножко многословно получилось...
Код:
[Setup]
AppName=testApp
AppVersion=0.1
DisableWelcomePage=yes
DefaultDirName={tmp}\testApp
OutputDir=.
OutputBaseFilename=testApp
PrivilegesRequired=lowest
[code]
type
TFileVer = array[1..4] of Integer;
procedure CutVerNumber(var S: String; var N: Integer);
var
position: Integer;
begin
position := Pos('.', S);
if position > 0 then
begin
N := StrToInt(Copy(S, 1, position - 1));
S := Copy(S, position + 1, 99);
end
else
begin
N := StrToInt(S);
S := '';
end;
end;
function TFileVerToString(V: TFileVer): String;
var
i: Integer;
begin
Result := IntToStr(V[1]);
for i := 2 to 4 do
Result := Result + '.' + IntToStr(V[i]);
end;
function StringToTFileVer(S: String): TFileVer;
var
i: Integer;
V: TFileVer;
begin
for i := 1 to 4 do
CutVerNumber(S, V[i]);
Result := V;
end;
function IsNotLowerVersion(currentVersion, compareVersion: TFileVer): Boolean;
var
i: Integer;
begin
Result := False;
for i := 1 to 4 do
if currentVersion[i] < compareVersion[i] then
Exit;
Result := True;
end;
function InitializeSetup(): Boolean;
var
fileName: String;
versionString: String;
minVersion: TFileVer;
currentVersion: TFileVer;
begin
// Имя файла:
fileName := ExpandConstant('{reg:HKLM\SOFTWARE\Test,PATH_APPLICATION}\Test.exe');
// Требуемая версия (1.3.0.0):
minVersion[1] := 1;
minVersion[2] := 3;
minVersion[3] := 0;
minVersion[4] := 0;
if Not FileExists(fileName) then begin
MsgBox('Установка Прекращена:'#13#13 + 'Файл `' + ExtractFileName(fileName) + '` не найден', mbCriticalError, MB_OK);
Result := False;
Exit;
end;
GetVersionNumbersString(fileName, versionString);
currentVersion := StringToTFileVer(versionString);
if IsNotLowerVersion(currentVersion, minVersion) then
Result := True
else begin
MsgBox('Установка Прекращена:' \
+ #13#13'Версия файла `' + ExtractFileName(fileName) + '`: ' + TFileVerToString(currentVersion) \
+ #13#13'Требуется версия как минимум: ' + TFileVerToString(minVersion) \
, mbCriticalError, MB_OK);
Result := False;
end;
end;