我有一个使用WiX版本3的MSI版本.
我们正在部署的产品的所有先前安装程序在指定的配置下工作正常(即:如果存在先前版本,删除,然后安装新版本) - 但是,我们构建的新MSI在运行时不会安装所有文件'先删除'路径.
如果我们手动删除现有安装,然后运行新版本,则会安装所有文件 - 当我在Orca中检查MSI文件时,会显示文件和功能,似乎没问题.
我们已经尝试运行详细和额外的日志记录打开(/l*vx
)然而我们只能看到文件是否未被注册然后安装.
有什么想法或建议吗?这让我们走上了墙.
根据默认的自定义操作序列,Windows Installer会在删除任何现有版本的软件之前确定需要安装/覆盖哪些文件.Windows Installer使用REINSTALLMODE属性的值来告诉它如何决定何时覆盖文件.如果REINSTALLMODE包含"o",那么它只会安装版本不同或文件不存在的文件; 如果文件的修改日期<=创建日期(即文件未被修改),则仅安装非版本化文件.如果REINSTALLMODE包含"a",它将始终安装该文件,无论附加到现有文件的任何版本或日期信息如何.
您的方案中发生的情况很可能如下:
Windows Installer确定要安装的文件.它决定不需要安装某些文件(可能是因为它们已经存在并且与MSI中的版本相同或更新).
删除了以前版本的软件,包括Windows Installer确定不需要安装的文件.
Windows安装程序会为新安装安装文件,但不会安装确定不需要安装的文件.
最终结果是升级软件后丢失了一堆文件.设置REINSTALLMODE = amus而不是omus可能会解决您的问题,但您应该确保知道这会如何影响您的其他安装.如果有任何文件不希望被覆盖,则需要将这些组件标记为"从不覆盖".
好的,和我帮助我的其他人交谈,找到问题的解决方案.
我们添加了属性REINSTALLMODE
并将其设置为amus
.这是什么意思?
默认情况下,该属性设置为omus
:如果文件丢失或更旧,则重新安装,重写机器和用户配置单元的注册表,重新安装快捷方式.改变这个amus
基本上说:重新安装所有文件.
所以,不是100%确定原因是什么 - 我怀疑可能有奇怪的锁或什么,但设置amus
不会产生任何不利影响,所以我们会坚持这一点.
谢谢你的建议.
(另外,有关此属性的更多详细信息,请访问:MSDN:REINSTALLMODE属性