Inno setup 如何从PrepareToInstall事件函数设置StatusMsg

Inno setup 如何从PrepareToInstall事件函数设置StatusMsg,inno-setup,Inno Setup,我的应用程序需要安装.NET Framework,因此我在PrepareToIntall事件函数中运行.NET安装。在安装运行时,我想显示一些关于向导的简单消息 我找到了,但是那里的解决方案对我不起作用 我试过了 WizardForm.StatusLabel.Caption := CustomMessage('InstallingDotNetMsg'); 而且 WizardForm.PreparingLabel.Caption := CustomMessage('InstallingDotNe

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

我找到了,但是那里的解决方案对我不起作用

我试过了

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

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

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

现在的代码如下所示:

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;

您知道如何实现这一点吗?

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

但是您可以显示它一段时间(您使用的是
ewwaitunterminated
标志,因此您的安装是同步的,因此不会造成任何影响):


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

:-)?特拉玛是对的。在大多数情况下,通过[运行]部分安装是最佳解决方案。只有在
wp安装
过程中出于某种原因使用第三方应用时,才应在
wp安装
之前安装该应用。@TLama+1在您的解决方案上。不幸的是,我认为我无法使用此解决方案,因为我想在.Net framework安装失败时中止安装。这就是我使用PrepareToInstall函数的原因。我将更新我的问题以向你们展示我的代码。我只是制作了一个简单的脚本,在那个里我测试了各种方法,因为你们建议了刷新过程。我找到了展示程序,它很有效。。。当您执行
向导form.PreparingLabel.Show()
时,就是这样。如果执行
WizardForm.StatusLabel.Show(),效果会更好您还可以获得该进度条。这个解决方案也很有效。所以我接受了:)顺便说一句,我也是CR的:)等等,但是你必须在下一页才能看到
StatusLabel
ProgressGauge
。当触发
preparetoall
事件时,您处于
PreparingPage
上。[我注意到:-)你的一些项目的艺术很好!]我不知道你的意思。我试过了,它成功了。。。在不同的页面上调用StatusLabel.Show()是否会导致任何问题?它似乎工作得很好,不应该工作。这些控件实际位于不同的页面上。你不应该在那一页。这太疯狂了:-)您使用哪个版本的Inno安装程序?它是ANSI还是Unicode?哦,我忘了这个方法(在Delphi中)确保父级是可见的,所以它把页面放在前面,并且它只在视觉上“翻转”它。好的,您应该避免这样做,即使在这种情况下您很幸运,因为例如,当需要重新启动时,安装程序会切换回
准备页面
,因此它似乎会按要求运行。
[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;