如何从PrepareToInstall事件函数设置StatusMsg

时间:2014-05-13 12:40:22

标签: inno-setup

我的应用程序需要安装.NET Framework,因此我在 PrepareToIntall 事件函数中运行.NET安装。在安装运行时,我想在Wizard上显示一些简单的消息。

我找到How to set the status message in [Code] Section of Inno install script?,但那里的解决方案并不适合我。

我试过

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

以及

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

修改

我必须在 PrepareToInstall 功能中执行此操作,因为我需要在.net安装失败时停止设置。

Code现在看起来像这样:

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;

任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:9)

当您在StatusLabel事件方法的InstallingPage页面上时,PreparingPagePrepareToInstall向导页面托管。所以这是一个错误的标签。您将文本设置为PreparingLabel的尝试是正确的,但是失败了,因为默认情况下该标签是隐藏的(当您将非空字符串作为结果返回到事件方法时显示)。

但你可以显示它一段时间(你使用ewWaitUntilTerminated标志,所以你的安装是同步的,因此它不会伤害任何东西):

[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;

答案 1 :(得分:0)

另一种解决方案是使用CreateOutputProgressPage在“准备安装”页面的顶部显示进度页面。有关用法的示例,请参阅Inno附带的CodeDlg.iss示例脚本;它相当简单。