WiX:升级时替换子目录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WiX:升级时替换子目录相关的知识,希望对你有一定的参考价值。
我正在使用WiX安装一些程序v1.0,它带有自己的JRE 8.x,位于子目录jre/
中。现在我将我的程序升级到版本1.1,它基于11.x JRE。我的MajorUpgrade
是
<MajorUpgrade Schedule="afterInstallExecute" DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
更新1:我想保留
afterInstallExecute
,因为我想保留几个文件。
那么什么是完全替换/任何子目录的WiX方式?
- 我试图用JRE 11替换JRE 8.结果这留下了现有的文件,特别是
jre/lib/ext/
。但是当将JRE从v9以下更新到v9 + requires that folder not to exist时,JVM在升级后拒绝启动 - 所以我试图用
jre/
(RemoveFile ... On='install'
)标记source-sub目录中的所有文件,希望安装新文件会删除旧文件,但这不起作用 - 最后重新使用
jre/
我将所有JRE 8文件放在jre-8u181/
的子目录jre-11.0.2_7/
和JRE 11文件中,希望WiX识别“哦,我不再需要sub dirjre-8u181/
,所以我可以删除它”。也不起作用。
更新2:通过包含JRE文件夹
<Directory Id='foo_jre_32' Name='jre'> <?include jre32.wxi ?> </Directory>
jre32.wxi是一个相当长的,自动生成的列表,如
<Include> <Component Id='_6387aee1c48be620fded05f509eb61ef' Guid='*'> <File Id='_e566fc2d9d74ea7a1249736056b2a2e4' Source='foojreTHIRDPARTYLICENSEREADME.txt' Name='THIRDPARTYLICENSEREADME.txt' DiskId='1' /> </Component> <Component Id='_0dcaf4ce39ea5a8ab63704e6e8e23514' Guid='*'> <File Id='_9e93e8a3fced0b6549171fc677dad65c' Source='foojreREADME.txt' Name='README.txt' DiskId='1' /> </Component> <Component Id='_2fa36d02341dba40d7dd8dabc21aa506' Guid='*'> <File Id='_3654927acd82cae7b37fb9b7c92a6615' Source='foojre elease' Name='release' DiskId='1' /> </Component> <Directory Id='_9b3d18d11d414dfb14909186a8ebb330' Name='lib'> <!-- ... -->
将属性更改为Schedule="afterInstallValidate"
(或删除属性,因为这是默认值)。
这会导致Windows Installer在安装新版本的产品之前完全删除现有版本。您现在可以通过从新版本中省略该文件夹来删除该文件夹。
主要升级的这种安排是我一般建议的。它给您带来最少的麻烦,因为新版本安装将始终“新鲜”,没有旧版本(除非有用户修改的文件)。当然这将比Schedule="afterInstallExecute"
慢一些,但正确的安装比2秒快的安装更重要。
另见MajorUpgrade element的文档。
我想我找到了它,感谢@ tom-blodget:我将JRE文件夹包含为一组Directory
和Component
/ File
。 File
有一个Guid
,它是固定的(我需要它们可以在我们的构建系统中重现,以允许引用它们)。我没有为新的JRE文件夹m更新它们(现在我这样做,再加上我将JRE文件夹(新旧文件夹)安装到不同的目标文件夹(我最初的问题中的选项#3)。再次感谢!
以上是关于WiX:升级时替换子目录的主要内容,如果未能解决你的问题,请参考以下文章