正确的代码如下,随便还给你一个示例。
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[code]
procedure DecodeVersion(verstr: String; var verint: array of Integer);
var
n,p: Integer; s: string;
begin
verint := [0,0,0,0];
n := 0;
while ( (Length(verstr) > 0) and (n < 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[n] := StrToInt(s);
n := n + 1;
verstr := Copy( verstr, p+1, Length(verstr));
end
else
begin
verint[n] := StrToInt( verstr );
verstr := '';
end;
end;
end;
function CompareVersion(ver1, ver2: String) : Integer;
var
verint1, verint2: array of Integer;
n: integer;
begin
SetArrayLength( verint1, 4 );
DecodeVersion( ver1, verint1 );
SetArrayLength( verint2, 4 );
DecodeVersion( ver2, verint2 );
Result := 0;
n := 0;
while ( (Result = 0) and ( n < 4 ) ) do
begin
if verint1[n] > verint2[n] then
Result := 1
else
if verint1[n] < verint2[n] then
Result := -1
else
Result := 0;
n := n + 1;
end;
end;
function InitializeSetup(): boolean;
var
oldVersion: string;
begin
if Not RegValueExists(HKLM, 'Software\Microsoft\DirectX', 'Version') then
begin
MsgBox('安装程序检测到您的系统内没有安装 ActiveX。安装无法继续。', mbInformation, MB_OK);
Exit;
end;
if RegQueryStringValue(HKLM, 'Software\Microsoft\DirectX', 'Version', oldVersion) then
if CompareVersion(oldVersion, '5.0.0.0') >= 0 then
begin
MsgBox('安装程序检测到您的 ActiveX 版本为 ' + oldVersion + ',满足要求。安装可以继续。', mbInformation, MB_OK);
result := true;
end
else
begin
MsgBox('安装程序检测到您的 ActiveX 版本为 ' + oldVersion + ',不满足要求。安装无法继续。', mbInformation, MB_OK);
result := false;
end;
end;