Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set StatusMsg from PrepareToInstall event function

Tags:

inno-setup

My application requires .NET Framework to be installed so I run .NET installation in PrepareToIntall event function. While the installation is running I would like to display some simple message on Wizard.

I found How to set the status message in [Code] Section of Inno install script? but the solution there doesn't work for me.

I tried

WizardForm.StatusLabel.Caption := CustomMessage('InstallingDotNetMsg');

and also

WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNetMsg');

EDIT

I have to do this in PrepareToInstall function, because I need to stop the setup when .net installation fails.

Code looks like this right now:

function PrepareToInstall(var NeedsRestart: Boolean): String;
var 
   isDotNetInstalled : Boolean;
   errorCode : Integer;
   errorDesc : String;
begin
   isDotNetInstalled := IsDotNetIntalledCheck();
   if not isDotNetInstalled then 
   begin
      //WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNetMsg');
      WizardForm.StatusLabel.Caption := CustomMessage('InstallingDotNetMsg');
      ExtractTemporaryFile('dotNetFx40_Full_x86_x64.exe');
      if  not ShellExec('',ExpandConstant('{tmp}\dotNetFx40_Full_x86_x64.exe'),'/passive /norestart', '', SW_HIDE, ewWaitUntilTerminated, errorCode) then
      begin
        errorDesc := SysErrorMessage(errorCode);
        MsgBox(errorDesc, mbError, MB_OK);
      end; 
      isDotNetInstalled := WasDotNetInstallationSuccessful();
      if not isDotNetInstalled then
      begin
         Result := CustomMessage('FailedToInstalldotNetMsg');
      end;
   end;
end;

Any Ideas how to achieve this?

like image 748
Kapitán Mlíko Avatar asked May 13 '14 12:05

Kapitán Mlíko


1 Answers

The StatusLabel is hosted by the InstallingPage wizard page while you're on PreparingPage page in the PrepareToInstall event method. So that's a wrong label. Your attempt to set the text to the PreparingLabel was correct, but failed because that label is hidden by default (it is shown when you return non empty string as a result to the event method).

But you can show it for a while (you are using ewWaitUntilTerminated flag, so your installation is synchronous, thus it won't hurt anything):

[Code]
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
  WasVisible: Boolean;
begin
  // store the original visibility state
  WasVisible := WizardForm.PreparingLabel.Visible;
  try
    // show the PreparingLabel
    WizardForm.PreparingLabel.Visible := True;
    // set a label caption
    WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNetMsg');
    // do your installation here
  finally
    // restore the original visibility state
    WizardForm.PreparingLabel.Visible := WasVisible;
  end;
end;
like image 140
TLama Avatar answered Nov 30 '22 06:11

TLama