我有一个Wix项目,我已设置允许重大升级。我正在使用WixUI_Advanced在每用户和每台机器安装之间进行选择。当我按用户安装和升级时,一切都按预期工作,安装程序会识别升级,并且“程序和功能”中只有一个条目。但是,当我选择每台机器安装时,它会开始复制程序和功能中的条目(即使安装和升级都是每台机器和同一文件夹)。
查看安装日志文件似乎在用户有机会选择每台计算机安装之前正在执行FindRelatedProducts,因此安装程序认为上下文已更改且不会进行升级。我试图在InstallUISequence中禁止FindRelatedProducts,但是当我这样做时,安装程序仍然会跳过InstallExecuteSequence中的FindRelatedProducts。
此时我有什么选择?
答案 0 :(得分:1)
在选择安装上下文后,您可以再次手动执行FindRelatedProducts操作。使用MsiDoAction方法。我曾经使用过这种方法,似乎有效。
答案 1 :(得分:0)
更好的方法是在FindRelatedProducts
之前运行您自己的自定义操作,该操作将搜索已安装产品的先前版本。该自定义操作应根据先前版本的范围将ALLUSERS
设置为1或Nothing,以便FindRelatedProducts
找到它并安排其升级。如果以前的版本是按计算机安装的,那么一个好主意就是禁止为用户选择每个用户的作用域-否则安装程序可能没有足够的特权来升级以前的基于计算机的安装。
这似乎是InstallShield采取的方法。如果您使用免费的InstallShield Limited Edition创建了一个空的测试MSI软件包,然后使用Dark进行了反编译,则您会看到该自定义操作称为IsSetAllUsers
,位于SetAllUsers.dll
中。