Inno setup InnoSetup&;Pascal-即使在成功编译后运行时也会出现类型不匹配错误

Inno setup InnoSetup&;Pascal-即使在成功编译后运行时也会出现类型不匹配错误,inno-setup,pascal,Inno Setup,Pascal,当我编译下面的代码时,它会无错误地完成,但当我尝试运行安装文件时,会出现类型不匹配错误。有人能告诉我是什么引起的吗?(确切的错误消息是“运行时错误(1:66):类型不匹配”。) 引用GetWindowsVersion()的Inno安装文档: 返回压缩为单个整数的Windows版本号。高8位指定主版本;以下8位指定次要版本;较低的16位指定内部版本号。例如,在Windows 2000(版本5.0.2195)上,此函数将返回$05000893 无法与浮点值进行比较,需要提取版本号的部分,如下所示:

当我编译下面的代码时,它会无错误地完成,但当我尝试运行安装文件时,会出现类型不匹配错误。有人能告诉我是什么引起的吗?(确切的错误消息是“运行时错误(1:66):类型不匹配”。)


引用
GetWindowsVersion()
的Inno安装文档:

返回压缩为单个整数的Windows版本号。高8位指定主版本;以下8位指定次要版本;较低的16位指定内部版本号。例如,在Windows 2000(版本5.0.2195)上,此函数将返回$05000893

无法与浮点值进行比较,需要提取版本号的部分,如下所示:

function AppDir(Param: String): String;
var
  Ver: Cardinal;
  VerMajor, VerMinor, BuildNum: Cardinal;
begin
  Ver := GetWindowsVersion();
  VerMajor := Ver shr 24;
  VerMinor := (Ver shr 16) and $FF;
  BuildNum := Ver and $FFFF;

  if VerMajor >= 6 then
    Result := ExpandConstant('{userdocs}')
  else
    Result := ExpandConstant('{pf}');
end;
请注意,永远不要检查
VerMajor
是否相等,因为这对于较低或较高的Windows版本都会失败。始终使用
=

function AppDir(Param: String): String;
var
  Ver: Cardinal;
  VerMajor, VerMinor, BuildNum: Cardinal;
begin
  Ver := GetWindowsVersion();
  VerMajor := Ver shr 24;
  VerMinor := (Ver shr 16) and $FF;
  BuildNum := Ver and $FFFF;

  if VerMajor >= 6 then
    Result := ExpandConstant('{userdocs}')
  else
    Result := ExpandConstant('{pf}');
end;