如何在 Wix 中添加命令行参数
Posted
技术标签:
【中文标题】如何在 Wix 中添加命令行参数【英文标题】:how to add command line parameter in Wix 【发布时间】:2014-06-17 09:52:32 【问题描述】:我一直在为以下简单的问题寻找一个好的答案。
我有一个交互式 Wix 安装程序,效果很好。用户需要接受交互式设置中的许可协议才能进行设置。现在,我需要一个静默安装程序,用户将通过输入像 ACCEPT-EULA=YES 这样的命令行参数来接受相同的许可协议。 谁能指导我如何在 wxs 文件中实现这一点?顺便说一句,我没有使用 MSVC。我试过了
<util:XmlFile Action="setValue" ...
但有很多不同类型的错误。
非常感谢任何帮助。 谢谢。
【问题讨论】:
【参考方案1】:您希望在安装执行序列中首先安排一个错误自定义操作,条件为 UILevel
UILevel 属性在此处定义。 5 表示完整的 UI,因此您不希望此 CA 运行。
<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>
当然,您现在有一个问题,如果他们没有记录安装,他们将不知道安装程序失败的原因。就我个人而言,我认为这是高层管理人员发明的要求,当遇到这个问题时,我总是会反击。否则你会进入像this 这样的疯狂之地。
【讨论】:
嗨,Christopher,我尝试了您的代码,但即使我提供了必要的参数,安装在开始时也会失败。当我检查日志文件时,我看到“产品:App Launcher -- 安装失败。Windows Installer 安装了产品。产品名称:App Launcher。产品版本:1.1.0。产品语言:1033。制造商:测试。安装成功或错误状态:1605。” 你运行了什么命令行?您是否执行了详细日志? Christophe,目前一切正常,但我收到了您在卸载时输入的错误消息。所以,我猜 UILevel 在卸载时会出现 啊,我的错。我忘了添加一些东西。让我修改我的答案。是的,默认情况下卸载具有基本 UI,除非您从维护安装中执行它,然后选择删除。我添加了“未安装”表达式,因此该条件仅适用于初始安装。 太棒了!!!另一个小问题。我们是否可以显示当命令行中不接受 eula 时要显示的错误消息作为响应而不是弹出消息?因为它是一个静默安装,我希望它是一个真正的静默,没有任何弹出窗口:)【参考方案2】:我有点同意 Chris 的观点,拒绝此要求,并将许可协议放在主应用程序 EXE 文件中,并为每个用户标记特定用户是否已看到并接受许可协议。
这是假设这在法律上非常重要,因为在我看来,这对每个用户来说都是一个严重的烦恼。但是,可以说让系统管理员代表每个用户接受许可协议在法律上可能不是很好。我不确定大公司实际上是如何处理的。您当然可以询问您的营销和销售人员他们对此有何看法 - 这是他们的问题。
我认为建议的条件可能有效,但这完全取决于您将自定义操作放在序列中的哪个位置,是否使用主要升级补丁或类似的不寻常的东西。理想情况下,您应该严格限制操作,以使操作只能在真正需要时运行。
至少测试以下场景:
全新安装,静默和交互方式 重大升级,静默和互动 以静默方式和交互式方式卸载 修改(从添加/删除程序开始)并使用MSI condition cheat sheet 来帮助您。
【讨论】:
我的静默安装程序是为大公司推送公司电脑的笔记本电脑的应用程序。由于它是无声的,因此用户不知道他/她的计算机中安装了什么。因此,显示许可协议没有任何意义。因此,我们寻求这样的解决方案。我不知道它的合法性。 我认为显示许可协议可能是应用程序本身的要求? 实际上,它几乎是标准的许可协议,主要包含我们在软件中使用的开源软件。当然还有一些其他的法律术语,比如责任等等。以上是关于如何在 Wix 中添加命令行参数的主要内容,如果未能解决你的问题,请参考以下文章
Wix Burn 没有将命令行参数传递给相关软件包(同一安装程序的旧版本)