是否可以显示 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;
基本上我要实现的目标如下:
如果用户 运行 使用 /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;