'Check'函数在Inno设置中多次执行



我是Inno设置脚本的新手,我正在尝试使用以下代码作为先决条件来安装.NET Framework 3.5。Check功能多次执行。有人可以帮我理解为什么吗?

注意:以下代码中的所有其他部分(SetupIcons等)都有适当的内容。

[Files]
Source: "Frameworksdotnetfx35setup.exe"; DestDir: {tmp}; Flags: deleteafterinstall; 
    BeforeInstall: Install35Framework; Check: Framework35IsNotInstalled
[Code]
function IsDotNetDetected(version: string; service: Cardinal): boolean;
begin
  Result := { ... };
end;
function Framework35IsNotInstalled: Boolean;
begin
  if IsDotNetDetected('v3.5', 1) then
  begin
    MsgBox('Framework35IsNotInstalled: FALSE ', mbConfirmation, MB_YESNO);
    Result := False;
  end else begin
    MsgBox('Framework35IsNotInstalled: TRUE ', mbConfirmation, MB_YESNO);
    Result := True;
  end;
end; 
procedure Install35Framework;
begin
  { ... }
end;

引用检查参数文档:

设置可能会多次调用每个检查功能,即使只有一个使用检查功能的条目。如果您的函数执行了冗长的代码,则可以通过仅执行一次代码并"缓存"整体变量中的结果来优化它。

这样的行为是设计的。

并且由于您的代码非常简单,我什至不认为它需要任何优化。如果运行几次,这是完全可以的。


不是吗,您可以这样优化:

var
  Framework35IsNotInstalledCalled: Boolean; 
  Framework35IsNotInstalledResult: Boolean;
function Framework35IsNotInstalled: Boolean;
begin
  if not Framework35IsNotInstalledCalled then
  begin
    Framework35IsNotInstalledResult := IsDotNetDetected('v3.5', 1);
    Framework35IsNotInstalledCalled := True;
  end;
  Result := Framework35IsNotInstalledResult;
end; 

相关内容

最新更新