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;