我正在使用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/lib/ext/
。但是,当将JRE从v9以下更新到v9 + requires that folder not to exist时,JVM拒绝在升级后启动jre/
(source)标记RemoveFile ... On='install'
-sub dir中的所有文件,希望安装新文件会删除旧文件,但这没用jre/
,我将所有JRE 8文件放在子目录jre-8u181/
中,并将JRE 11文件放在jre-11.0.2_7/
中,希望WiX能够识别“哦,我不需要子目录{ {1}},因此我可以将其删除”。也不起作用。更新2:通过以下方式包含JRE文件夹
jre-8u181/
jre32.wxi是一个相当长的,自动生成的列表,例如
<Directory Id='foo_jre_32' Name='jre'> <?include jre32.wxi ?> </Directory>
答案 0 :(得分:1)
将属性更改为Schedule="afterInstallValidate"
(或删除属性,因为这是默认设置)。
这将导致Windows Installer在安装产品的新版本之前完全删除现有版本。现在,您只需删除新版本中的文件夹即可删除它。
我通常建议采用这种“重大升级”计划。它使您无忧无虑,因为新版本的安装将始终以“全新”方式启动,而不会保留旧版本(除非存在用户修改的文件)。当然,这会比Schedule="afterInstallExecute"
慢一些,但是正确的安装比快2秒的安装更为重要。
另请参阅MajorUpgrade element的文档。
答案 1 :(得分:0)
由于@ tom-blodget,我想找到了它:我将JRE文件夹作为一组Directory
和Component
/ File
包含在内。 File
有一个Guid
,它是固定的(我需要它们在我们的构建系统中可复制,以允许对其进行引用)。我没有为新的JRE文件夹m更新它们(现在我做了,再加上将JRE文件夹(旧的和新的)安装到不同的目标文件夹(我的第一个问题中的选项#3)。再次感谢!