1

我一直在为以下足够简单的问题寻找一个好的答案。

我有一个交互式 Wix 安装程序,效果很好。用户需要接受交互式设置中的许可协议才能进行设置。现在,我需要一个静默安装程序,用户将通过输入 ACCEPT-EULA=YES 之类的命令行参数来接受相同的许可协议。谁能指导我如何在 wxs 文件中实现这一点?顺便说一句,我没有使用 MSVC。我努力了

<util:XmlFile Action="setValue" ...

但有很多不同类型的错误。

我将不胜感激任何帮助。谢谢。

4

2 回答 2

2

您希望在安装执行序列中首先安排一个错误自定义操作,条件为 UILevel < 5 且 Not ACCEPTEULA~="YES"`

UILevel属性在此处定义。5 表示完整的 UI,因此您不希望此 CA 运行。< 5 表示某种形式的静默安装,因此您只希望在属性不等于(不区分大小写)“是”时触发此自定义操作。

<CustomAction Id="RequireEulaWhenSilent" Error="You must accept the EULA by passing ACCEPTEULA=YES when performing a silent installation."/>
<InstallExecuteSequence>
  <Custom Action="RequireEulaWhenSilent" Before="AppSearch"><![CDATA[UILevel<5 and Not ACCEPTEULA~="YES" and Not Installed]]></Custom>
</InstallExecuteSequence>

当然,您现在有一个问题,如果他们没有记录安装,他们将不知道安装程序失败的原因。就我个人而言,我认为这是高层管理人员发明的要求,当遇到这个问题时,我总是会反击。否则你会像这样进入疯狂的土地。

于 2014-06-17T12:28:33.273 回答
1

我有点同意 Chris 的观点,拒绝这个要求,并将许可协议放在主应用程序 EXE 文件中,每个用户都有一个标志,表明特定用户是否已经看到并接受了许可协议。

这是假设这在法律上非常重要,因为在我看来,这对每个用户来说都是一个严重的烦恼。但是,可以说让系统管理员代表每个用户接受许可协议在法律上可能不是很好。我不确定大公司实际上是如何处理的。您当然可以询问您的营销和销售人员他们对此有何看法——这是他们的问题。

我认为建议的条件可能有效,但这完全取决于您将自定义操作放在序列中的哪个位置,是否使用主要升级补丁或类似的不寻常的东西。理想情况下,您应该严格限制操作,以使操作只能在真正预期的情况下运行。

至少测试以下场景:

  • 全新安装,静默和交互
  • 重大升级,静默互动兼具
  • 卸载,静默和交互
  • 修改(从添加/删除程序开始)

并使用MSI 条件备忘单来帮助您。

于 2014-06-17T17:23:00.893 回答