Search code examples
inno-setupexit-codepascalscript

How to call an exe when Inno Setup installation fails (within the installer itself)?


I've been using Inno Setup for several months now, but I'm struggling to find how to detect, from within the installer itself, an error that would cause Inno Setup to end with a non-zero exit code.

I've thought about using CurStepChanged with the ssDone step, or even DeinitializeSetup, but I can't find how to get access to the wizard's exit-code.

Did I miss something? There must be a way to do it...

I'd like to know if anything went wrong so that I can start a rollback procedure on the machine. Your proposed answer did the trick.


Solution

  • You cannot find out installer exit code from the Pascal Scripting.


    If you want to detect that the installer failed, remember if CurStepChanged was called with ssDone and test that in DeinitializeSetup.

    var
      Succeeded: Boolean;
    
    procedure DeinitializeSetup();
    begin
      if Succeeded then
      begin
        Log('Installation succeeded');
      end
        else
      begin
        Log('Installation failed');
      end;
    end;
    
    procedure CurStepChanged(CurStep: TSetupStep);
    begin
      if CurStep = ssDone then
      begin
        Succeeded := True;
      end;
    end;
    

    There are edge cases, when ssDone is used even, if the installer fails.

    For example, when it fails because a machine was not restarted to complete the previous installation. In this case the CurStepChanged is not called with ssPostInstall. So you may want to check for both steps, if this scenario can happen in your installer.