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?