问题
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;
回答1:
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;
来源:https://stackoverflow.com/questions/54808659/excludes-part-of-code-section-in-sspostinstall-step-if-installation-is-update-in