如果在Inno Setup中更新了安装,则在ssPostInstall步骤中排除“代码”部分的一部分

时间:2019-02-21 13:51:13

标签: inno-setup pascalscript

我尝试同时使用同一安装程序(全新安装和更新)。

  • 因此,如果用户首次尝试安装我的应用程序,它将作为前提条件运行包括MySQL安装程序在内的完整安装,并且[Code]中的MySQL安装部分将正常执行。
  • 但是,如果用户已经安装了我的应用程序,并且安装程序是较新的版本(更新),则[Code]中MySQL安装的一部分不应执行。

那么,如果安装只是在更新,那么如何为这部分代码(MySQL安装)实现异常功能?

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
{ ... }
begin
  if CurStep = ssPostInstall then
  begin
    { fresh installation code }
  end;
end;

1 个答案:

答案 0 :(得分:2)

您可以在我的答案中使用IsUpgrade函数
Can Inno Setup respond differently to a new install and an update?

虽然它依赖于ssPostInstall时已经存在的“卸载”注册表项的存在,但是您必须缓存其值。

var
  IsUpgradeCached: Boolean;

function InitializeSetup(): Boolean;
begin
  IsUpgradeCached := IsUpgrade;
  Result := True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
{ ... }
begin
  if (CurStep = ssPostInstall) and (not IsUpgradeCached) then
  begin
    { fresh installation code }
  end;
end;