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

时间:2015-04-12 03:27:37

标签: inno-setup

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

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

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

2 个答案:

答案 0 :(得分:1)

简单的解决方案 - 可能不是最好的,但速度非常快。

基于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;

答案 1 :(得分:0)

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

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

[Code]

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