Inno Setup使用Pascal脚本

问题描述

我使用Inno Setup 6.x的目标是自定义代码中的FinishedLabel文本,即Pascal脚本。我使用Pascal脚本的原因是,我只想在IsAdminMode()为true的情况下自定义/更改标签。我该怎么办?

以下两种方法不起作用:

  1. 使用脚本化常量:

    [Messages]
    FinishedLabel={code:GetFinishedLabel}
    
    [Code]
    function GetFinishedLabel(Param: String): String;
    begin
      Result := 'BLA';
    end;
    

    这将显示“ {code:GetFinishedLabel}”,而不是“ BLA”。

  2. InitializeWizard中自定义向导。

    完整(失败)示例:

    [Code]
    procedure InitializeWizard();
    begin
      WizardForm.FinishedLabel.Caption := 'BLA';
    end;
    

    FinishLabel仍显示Default.isl的原始文本

有什么想法吗?

解决方法

FinishedLabel在安装结束时会根据各种因素进行更新。因此,您在InitializeWizard中设置的值将被覆盖。您稍后必须设置自定义消息,例如在CurPageChanged(wpFinished)中:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then
  begin
    WizardForm.FinishedLabel.Caption := 'BLA';
  end;
end;

您可能会考虑改进代码以执行Inno Setup会执行的操作,例如:

  • 考虑到是否需要重新启动(FinishedRestartLabel);
  • 考虑到是否创建了图标(FinishedLabelFinishedLabelNoIcons);
  • 调整标签高度以适合消息;
  • 根据邮件的高度移动RunList的位置。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...