Inno setup 是否可以显示EULA,然后使用/SILENT或/VERYSILENT参数运行安装程序?

Inno setup 是否可以显示EULA,然后使用/SILENT或/VERYSILENT参数运行安装程序?,inno-setup,Inno Setup,基本上,我试图实现以下目标: 如果用户使用/SILENT或/VERYSILENT参数运行安装程序,安装程序将立即显示EULA。如果用户拒绝,安装将被取消。如果用户接受,其余的安装将以静默或verysilent模式进行 编辑:RobeN和TLama提出的两种解决方案都非常有效。唯一的问题是当EULA太大而无法容纳消息框时(这是最常见的情况)。无论如何,这是一个很好的解决方案,至少在安装开始之前显示一些警告或信息 我认为你不能直接这么做 但是您可以引入另一个命令行选项,如/AUTOMATIC,它可以

基本上,我试图实现以下目标:

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


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

我认为你不能直接这么做

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

[代码]
函数ShouldSkipPage(PageID:Integer):布尔值;
开始
结果:=
(Pos('/AUTOMATIC',大写(GetCmdTail())>0)和
(PageID wpLicense);
结束;

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

基于


我已经提交了对你头衔的修改。见“”-共识是“不,不应该”。。。。我的意思是“他们应该”…好的,谢谢,我以后会观察到的。此问题询问安装程序在静默模式下运行时是否可以显示许可证。答案是从
InitializeSetup
事件处理程序生成您自己的表单,因为在静默模式下,许可证不会显示并自动接受。@TLama我理解这一点。我知道有比我更好(但更复杂)的答案。我已经发布了这篇文章,以防OP满意。不清楚OP是否需要强制显示许可证的方法,或者只是显示许可证的安装模式,但没有其他内容。如果用户拒绝,安装将被取消。非常清楚,这是关于用户接受或拒绝许可的窗口。此外,最好先测试
PageID wpLicense
,不要浪费时间检查每个页面的命令行尾部;-)这里应该是,稍微短一点。。。只要您有一个短的EULA(或大监视器:),消息框就可以了。RobenN和@TLama提供的两种解决方案都可以完美地工作。但是,EULA太大,无法放入消息框中。。。有没有一种方法可以用垂直滚动的文本框来表示EULA?谢谢您必须编写自己的
表单
,因为Inno安装程序的
向导
不会在
静默
Verysilent
模式下显示。这并不容易。也许您可以修改您的计划并使用例如
ShouldSkipPage(PageID:Integer):布尔功能,而不是
静默
模式,以覆盖默认的向导行为,这是Martin建议的更快的解决方案。
[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;