基本上我想要实现的目标如下:
如果用户使用/SILENT
或/VERYSILENT
参数运行设置,则设置将立即显示EULA。如果用户拒绝,则安装将被取消。如果用户接受,则安装的其余部分将以静默或静默模式进行。
编辑:RobeN和TLama提供的两种解决方案都运行良好。唯一的问题是当EULA太大而无法容纳消息框时(这是最常见的情况)。无论如何,这是一个很好的解决方案,至少在安装开始之前显示一些警告或信息。
答案 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;