在工作中,我们使用WiX来构建安装包.我们希望安装产品X会导致在该计算机上卸载该产品的先前版本.
我已经在互联网上的几个地方读过有关重大升级的内容,但无法让它发挥作用.任何人都可以指定我需要采取的确切步骤,以便将卸载以前的版本功能添加到WiX吗?
MyApp版本1.0包含文件foo.dll.此文件的版本是10.5.567版.现在MyApp是2.0版,foo.dll版本是2.0.123.版本低于旧版本.编写此dll的供应商决定使用文件版本号向后退.这不是我可以改变的决定.
如何让WiX始终安装此文件?
RemoveExistingProducts操作在InstallFinalize操作之后计划,也无法更改.
InstallShield有一个'always overwrite'标志,但我不认为我可以在不通过编译器开关更改所有文件的行为的情况下模仿它.我不想要这个.我只是想更新这个文件.
我也试过了
<RemoveFile Id="foo.dll" On="install" Name="foo.dll" />
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.我最终收到'错误2753文件foo.dll未标记为安装'.
我的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主要升级没有安装所有文件:当我安装新的msi软件包并执行主要升级时,现在nlog.dll(根据其文件版本更新,但更旧)根据其文件日期和产品版本)正在删除,但新nlog.dll安装没有.
但是,使用Schedule="afterInstallExecute"或Schedule="afterInstallFinalize"建议不会对我有用.不像在Robbie的情况下那样删除较新的文件而不安装较旧的文件,它不会覆盖当前文件,只是将其留在原位.
简而言之,我希望我的安装程序只需安装随附的所有文件,无论文件/产品/程序集版本是什么.在有效的情况下,需要用较旧的文件替换较新的文件.你不能告诉安装程序引擎忽略文件版本/日期吗?如果没有,我的选择是什么?