【发布时间】:2019-04-24 14:02:50
【问题描述】:
我正在使用 WiX 安装一些程序 v1.0,它带有自己的 JRE 8.x,位于子目录 jre/ 中。现在我将我的程序升级到基于 11.x JRE 的 1.1 版。我的MajorUpgrade 是
<MajorUpgrade Schedule="afterInstallExecute" DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
更新 1: 我想保留
afterInstallExecute,因为有一个 我想保留几个文件。
那么完全替换那个/任何子目录的 WiX 方法是什么?
- 我尝试将 JRE 8 替换为 JRE 11。结果证明这会保留现有文件,尤其是
jre/lib/ext/。但是当将 JRE 从 v9 更新到 v9+ requires that folder not to exist 时,JVM 在升级后拒绝启动 - 所以我尝试用
RemoveFile ... On='install'(source) 标记jre/-sub 目录中的所有文件,希望安装新文件会删除旧文件,但这不起作用 - 最后改为重用
jre/,我将所有JRE 8 文件放在子目录jre-8u181/中,将JRE 11 文件放在jre-11.0.2_7/中,希望WiX 能够识别“哦,我不再需要子目录jre-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='foo\jre\THIRDPARTYLICENSEREADME.txt' Name='THIRDPARTYLICENSEREADME.txt' DiskId='1' /> </Component> <Component Id='_0dcaf4ce39ea5a8ab63704e6e8e23514' Guid='*'> <File Id='_9e93e8a3fced0b6549171fc677dad65c' Source='foo\jre\README.txt' Name='README.txt' DiskId='1' /> </Component> <Component Id='_2fa36d02341dba40d7dd8dabc21aa506' Guid='*'> <File Id='_3654927acd82cae7b37fb9b7c92a6615' Source='foo\jre\release' Name='release' DiskId='1' /> </Component> <Directory Id='_9b3d18d11d414dfb14909186a8ebb330' Name='lib'> <!-- ... -->
【问题讨论】:
-
Windows Installer 安装/删除组件。目录不能是组件。通常,每个文件都是一个单独的组件。 Windows Installer 选择要安装/删除的组件,选择该组件所属的所有产品的哪些功能进行安装/删除/保留。那么,对于已经发布的安装程序版本,您是如何组织的呢?
-
正是这样,请参阅更新 2:作为组件列表(和目录,在一个大型包含中)
标签: wix