当前位置:  开发笔记 > 开发工具 > 正文

运行RemovePreviousVersion时,MSI不会安装所有文件

如何解决《运行RemovePreviousVersion时,MSI不会安装所有文件》经验,为你挑选了2个好方法。

我有一个使用WiX版本3的MSI版本.

我们正在部署的产品的所有先前安装程序在指定的配置下工作正常(即:如果存在先前版本,删除,然后安装新版本) - 但是,我们构建的新MSI在运行时不会安装所有文件'先删除'路径.

如果我们手动删除现有安装,然后运行新版本,则会安装所有文件 - 当我在Orca中检查MSI文件时,会显示文件和功能,似乎没问题.

我们已经尝试运行详细和额外的日志记录打开(/l*vx)然而我们只能看到文件是否未被注册然后安装.

有什么想法或建议吗?这让我们走上了墙.



1> Kevin Kibler..:

根据默认的自定义操作序列,Windows Installer会在删除任何现有版本的软件之前确定需要安装/覆盖哪些文件.Windows Installer使用REINSTALLMODE属性的值来告诉它如何决定何时覆盖文件.如果REINSTALLMODE包含"o",那么它只会安装版本不同或文件不存在的文件; 如果文件的修改日期<=创建日期(即文件未被修改),则仅安装非版本化文件.如果REINSTALLMODE包含"a",它将始终安装该文件,无论附加到现有文件的任何版本或日期信息如何.

您的方案中发生的情况很可能如下:

    Windows Installer确定要安装的文件.它决定不需要安装某些文件(可能是因为它们已经存在并且与MSI中的版本相同或更新).

    删除了以前版本的软件,包括Windows Installer确定不需要安装的文件.

    Windows安装程序会为新安装安装文件,但不会安装确定不需要安装的文件.

最终结果是升级软件后丢失了一堆文件.设置REINSTALLMODE = amus而不是omus可能会解决您的问题,但您应该确保知道这会如何影响您的其他安装.如果有任何文件不希望被覆盖,则需要将这些组件标记为"从不覆盖".



2> Matthew Sava..:

好的,和我帮助我的其他人交谈,找到问题的解决方案.

我们添加了属性REINSTALLMODE并将其设置为amus.这是什么意思?

默认情况下,该属性设置为omus:如果文件丢失或更旧,则重新安装,重写机器和用户配置单元的注册表,重新安装快捷方式.改变这个amus基本上说:重新安装所有文件.

所以,不是100%确定原因是什么 - 我怀疑可能有奇怪的锁或什么,但设置amus不会产生任何不利影响,所以我们会坚持这一点.

谢谢你的建议.

(另外,有关此属性的更多详细信息,请访问:MSDN:REINSTALLMODE属性

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有