Wix重大升级,无论新文件版本如何替换文件

标签 wix windows-installer major-upgrade

我的WiX安装程序(Wix 3.10,MSI 4.5)使用MajorUpgrade进行更新。在预构建中,将使用heat.exe收获要安装的文件。当前的(较旧的)msi文件包含文件nlog.dll(随NuGet包v4.1.0一起提供),该文件的文件版本为4.1.0.0,产品版本为4.1.0,最后写入时间为2015-09-01

自从nlog团队遇到一些强大的命名问题以来,他们发布了一个更新的NuGet包v4.1.1,其中包含一个更新的nlog.dll ,其文件版本降低到4.0.0.0 ,而其产品版本已增加到4.1.1,最后一次写入时间是2015-09-14

现在,我遇到了与Robbie一样的相关问题:wix major upgrade not installing all files:安装新的msi软件包并执行主要升级时,当前的nlog.dll(根据其文件版本,它是较新的,但是根据其文件日期,它是较旧的和产品版本)已删除,但未安装新的nlog.dll

但是,按照建议使用Schedule="afterInstallExecute"Schedule="afterInstallFinalize"不会帮我这个忙。它不会像Robbie那样删除较新的文件并且不安装较旧的文件,它不会覆盖当前文件,而是将其保留在原位。

长话短说,我希望我的安装程序可以简单地安装其附带的所有文件,而不管任何文件/产品/程序集的版本控制内容如何。在有效的情况下,需要用较旧的文件替换较新的文件。您不能仅告诉安装程序引擎忽略文件版本/日期吗?如果没有,我有什么选择?

最佳答案

您可以将REINSTALLMODE属性设置为AMUS而不是OMUS。这将全局影响所有组件。

另一个技巧是使用“版本说谎”。您可以在此处创作具有更高版本的file元素。使用热量会使这变得困难,因为现在您必须在编译XML之前对其进行转换。

当然,真正的解决方案是打败nlog团队。但是根据我多年来从他们那里看到的情况,这将永远不会发生。也许您只是使用资源编辑器来破解DLL并“修复”版本号。假设您不需要强命名。这感觉很脏,但对我来说可能是CM的噩梦。

或者只是转储nlog。 :)

关于Wix重大升级,无论新文件版本如何替换文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32603333/

相关文章:

outlook - 任何人都可以理解或阅读 Microsoft 反垃圾邮件标题吗?

java - 如何在 MSI 中将依赖于 Java 的应用程序与 JRE 捆绑在一起

c# - 安装后出现不需要的 MSI

wix installer 3.7 bootstrapper 注册表搜索

wix - 在 Wix 中进行重大升级会在添加/删除程序中创建 2 个条目

wix 重启管理器成功关闭应用程序,但表示不能

iis - 在 WIX 安装程序中创建应用程序池

Wix 自定义操作仅在安装期间执行,但不在升级和删除时执行?

windows-installer - 使用 Inno Setup 有条件地安装 x64 驱动程序