InnoSetup & Pascal - ошибка несоответствия типов при запуске даже после успешной компиляции - PullRequest
0 голосов
/ 05 февраля 2010

Когда я компилирую код ниже, он завершается без ошибок, но когда я пытаюсь запустить установочный файл, я получаю ошибку несоответствия типов. Может кто-нибудь сказать мне, что может быть причиной? (точное сообщение об ошибке: «Ошибка времени выполнения (в 1:66): несоответствие типов»)

[Setup]
DefaultDirName={code:AppDir}\MyApp

[Code]
function AppDir(Param: String): String;
var
 Check: Integer;
begin
 Check := GetWindowsVersion();
 if Check = 6.0 then
 Result := ExpandConstant('{userdocs}')
 else
 Result := ExpandConstant('{pf}');
end;

1 Ответ

2 голосов
/ 05 февраля 2010

Цитирование из документации Inno Setup для GetWindowsVersion():

Возвращает номер версии Windows, упакованный в одно целое число. Старшие 8 бит указывают основную версию; следующие 8 битов определяют младшую версию; младшие 16 бит определяют номер сборки. Например, эта функция вернет $ 05000893 в Windows 2000, версия 5.0.2195.

Вы не можете сравнить со значением с плавающей запятой, вам нужно извлечь части номера версии, например:

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. Вместо этого всегда используйте <= или >=.

...