【问题标题】:Wix Major Upgrade and Install Context IssuesWix 主要升级和安装上下文问题
【发布时间】:2012-02-04 14:49:59
【问题描述】:
我有一个允许进行重大升级的 Wix 项目。我正在使用 WixUI_Advanced 在每用户和每机器安装之间进行选择。当我为每个用户安装和升级一切都按预期工作时,安装程序会识别升级,并且程序和功能中只有一个条目。但是,当我选择每台机器安装时,它会开始复制程序和功能中的条目(即使安装和升级都是每台机器并且到同一个文件夹)。
查看安装日志文件,FindRelatedProducts 似乎在用户有机会选择每台机器安装之前执行,因此安装程序认为上下文已更改并且不会进行升级。我试图在 InstallUISequence 中禁止 FindRelatedProducts,但是当我这样做时,安装程序仍然会跳过 InstallExecuteSequence 中的 FindRelatedProducts。
此时我有什么选择?
【问题讨论】:
标签:
wix
windows-installer
wix3.5
【解决方案1】:
您可以在选择安装上下文后再次手动执行 FindRelatedProducts 操作。使用MsiDoAction 方法。这种方法我用过一次,似乎奏效了。
【解决方案2】:
更好的方法是在FindRelatedProducts 之前运行您自己的自定义操作,以搜索已安装的产品的先前版本。该自定义操作应根据先前版本的范围将ALLUSERS 设置为1 或Nothing,以便FindRelatedProducts 找到它并安排其升级。如果以前的版本是在每台机器上安装的,那么一个好主意是禁止为用户选择每用户范围 - 否则安装程序可能没有足够的权限来升级以前的每台机器安装。
这似乎是 InstallShield 采用的方法。如果您使用免费的 InstallShield Limited Edition 创建一个空的测试 MSI 包,然后使用 Dark 对其进行反编译,您将看到该自定义操作名为 IsSetAllUsers 并位于 SetAllUsers.dll。