是否可以显示 EULA,然后 运行 使用 /SILENT 或 /VERYSILENT 参数设置?

Is it possible to display the EULA and then run the setup with /SILENT or /VERYSILENT parameter?

基本上我要实现的目标如下:

如果用户 运行 使用 /SILENT/VERYSILENT 参数设置,设置将立即显示 EULA。如果用户拒绝,安装将被取消。如果用户接受,安装的其余部分将以静默或非常静默模式进行。

编辑:RobeN 和 TLama 提出的两种解决方案都非常有效。唯一的问题是 EULA 太大而无法容纳消息框(这是最常见的情况)。无论如何,这是一个很好的解决方案,至少可以在安装开始之前显示一些警告或信息。

我认为你不能直接这样做。

但是您可以引入另一个命令行选项,例如 /AUTOMATIC,它可以满足您的需要。

[Code]

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result :=
    (Pos('/AUTOMATIC', Uppercase(GetCmdTail())) > 0) and
    (PageID <> wpLicense);
end;

简单的解决方案 - 可能不是最好的,但相当快。

基于How to detect whether the setup runs in very silent mode?

[Files]
Source: "EULA_ANSI.txt"; DestDir: "{tmp}"; Flags: dontcopy nocompression

[Code]
var 
  isSilent: Boolean;
  EULAText: AnsiString;

function InitializeSetup(): Boolean;
var
  j: Integer;
begin
  result := true;
  isSilent := False;
  for j := 1 to ParamCount do
    if (CompareText(ParamStr(j), '/verysilent') = 0) or 
     (CompareText(ParamStr(j), '/silent') = 0) then
    begin
      isSilent := True;
      Break;
    end; 

  if isSilent then begin
    ExtractTemporaryFile('EULA_ANSI.TXT');
    if LoadStringFromFile(ExpandConstant('{tmp}\EULA_ANSI.txt'), 
     EULAText) then 
    begin
      if MsgBox(EULAText, mbConfirmation, MB_YESNO) = IDNO then
        result := false;
    end
    else begin
      MsgBox('Unable to display EULA.' + #13#10 + #13#10 + 
       'Installation terminated!', mbCriticalError, MB_OK);
      result := false;
    end;   
  end
  else begin
    MsgBox(ExpandConstant('Standard Installation'), mbInformation,
     MB_OK);
  end;
end;