【问题标题】:Is it possible to display the EULA and then run the setup with /SILENT or /VERYSILENT parameter?是否可以显示 EULA,然后使用 /SILENT 或 /VERYSILENT 参数运行安装程序?
【发布时间】:2015-04-14 04:48:04
【问题描述】:

基本上我想要达到的目标如下:

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

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

【问题讨论】:

标签: inno-setup


【解决方案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;

【讨论】:

  • 这里应该是the same,稍微短一点……只要你有一个简短的 EULA(或大显示器:),消息框就可以了
  • RobenN 和@TLama 提出的两种解决方案都能完美运行。但是,EULA 太大而无法放入消息框...有没有办法以垂直滚动的文本框之类的方式呈现 EULA?谢谢!
  • 您必须编写自己的 Form,因为 Inno Setup 的 Wizard 不会在 SilentVerysilent 模式下显示。这并不容易。也许你可以修改你的计划并使用例如ShouldSkipPage(PageID: Integer): Boolean; 函数而不是 Silent 模式来覆盖默认的向导行为,这将是 Martin 建议的更快的解决方案。
【解决方案2】:

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

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

[Code]

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

【讨论】:

  • 不。此问题询问是否可以在安装程序以静默模式运行时显示许可证。答案是使用 InitializeSetup 事件处理程序制作您自己的表单,因为在静默模式下不会显示和自动接受许可证。
  • @TLama 我明白这一点。我知道有比我更好(但更复杂)的答案。我已经发布了这个,以防它对 OP 满意。目前尚不清楚 OP 是否需要一种强制显示许可证的方法,或者只是显示许可证的安装模式,但没有别的。
  • 这句话如果用户拒绝,安装被取消。很清楚,它是关于用户接受或拒绝许可的窗口。此外,您最好先测试PageID &lt;&gt; wpLicense,以免浪费时间检查每个页面的命令行尾部;-)
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
相关资源
最近更新 更多