首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wix主要升级,替换文件,而不管更新的文件版本。

Wix主要升级,替换文件,而不管更新的文件版本。
EN

Stack Overflow用户
提问于 2015-09-16 08:26:52
回答 2查看 4.1K关注 0票数 9

我的WiX安装程序(WiX3.10,MSI4.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.1.1,最后的写入时间是2015-09-14

现在我遇到了一个相关的问题,就像Robbie在这里所做的那样:wix major upgrade not installing all files:当我安装新的msi包并执行主要升级时,当前的nlog.dll (根据其文件版本更新,但根据其文件日期和产品版本更老)正在被删除,但是新的nlog.dll没有安装。

但是,按照建议使用Schedule="afterInstallExecute"Schedule="afterInstallFinalize"对我没有好处。它不会像Robbie那样删除较新的文件而不安装旧的文件,它不会覆盖当前的文件,而只是将其保留在原来的位置。

长话短说,我希望我的安装程序能够简单地安装它附带的所有文件,而不考虑任何文件/产品/程序集版本控制。在一些有效的情况下,希望用旧文件替换较新的文件。你不能告诉安装引擎忽略文件版本/日期吗?如果没有,我有什么选择?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-16 11:21:54

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

另一个诀窍是使用“版本说谎”。这是您用更高版本编写文件元素的地方。使用热会使这很困难,因为现在必须在编译XML之前对其进行转换。

当然,真正的解决方案是击中nlog团队的头部。但根据我多年来从他们身上看到的,这是永远不会发生的。也许您只是使用一个资源编辑器来破解DLL并“修复”版本#。那是假设你不需要它强大的名字。不过,这感觉很肮脏,可能是CM的噩梦。

或者直接扔掉nlog。:)

票数 11
EN

Stack Overflow用户

发布于 2015-09-16 17:54:41

如果这是一次重大升级,并且希望在安装新产品之前卸载所有内容,那么您将RemoveExistingProducts排在InstallInitialize或InstallValidate之后。它首先进行卸载。

我不知道你是不是收到了“不允许安装.”发出或不发出,但是如果是,而且还有Dll的其他客户端(它与其他已安装的产品共享),那么我将查看该Dll是否支持私有副本,以便您可以为您的产品拥有自己的私有副本。如果它与其他产品共享,我不会使用说谎版本--我会用Visual打开Dll“打开为文件”并更改版本!让它成为您最新的共享版本,所以每个安装它的包都可以使用它。

如果它不是与其他产品共享的,而且您只是遇到了MSI的怪癖,那么在RemoveExistingProducts之前设置您自己的升级元素并调度它,这就是决定不安装的原因。这是可行的,但它是在MigrateFeatureStates之前,所以您将失去在您的主要升级功能迁移。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32603333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档