How to set StatusMsg from PrepareToInstall event function

inno-setup

Solution

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;

Problem

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?

Original source

Related problems