Search code examples
inno-setuppascalscript

Excludes part of Code section in ssPostInstall step if installation is update in Inno Setup


I try to use same installer for both (fresh installation and update).

  • so if user try to install my application for first time it will run the full installation included MySQL installer as prerequisites, and the part of MySQL installation within [Code] will execute normally.
  • but, if user already installed my application, and the installer is newer version (update), the part of MySQL installation within [Code] shouldn't be execute.

So, how to implement exception function for this part of code (MySQL installation) if the installation is just updating?

[Code]

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

Solution

  • You can use IsUpgrade function from my answer to
    Can Inno Setup respond differently to a new install and an update?:

    Though as it relies on a presence of "Uninstall" registry key, which already exists at the time of ssPostInstall, you have to cache its value.

    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;