WiX:升级时替换子目录

WiX: Replace sub directory on upgrade

我正在使用 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."/>

Update 1: I'd like to keep afterInstallExecute because there are a couple of files I'd like to keep.

那么WiX如何完全替换that/any子目录呢?

Update 2: The JRE folder is included via

<Directory Id='foo_jre_32' Name='jre'>
  <?include jre32.wxi ?>
</Directory>

with jre32.wxi being a rather long, auto-generated list like

<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'>
      <!-- ... -->

将属性更改为 Schedule="afterInstallValidate"(或删除该属性,因为这是默认设置)。

这会导致 Windows 安装程序在安装产品的新版本之前完全删除现有版本。您现在只需从新版本中省略即可删除该文件夹。

这个重大升级的时间安排是我总体上推荐的。它给你带来的麻烦最少,因为新版本安装总是会开始 "fresh",而不会保留旧版本(除非有用户修改的文件)。当然这会比 Schedule="afterInstallExecute" 慢一些,但是正确的安装比快 2 秒的安装更重要。

另请参阅 MajorUpgrade element 的文档。

我想我已经找到了,感谢@tom-blodget:我将 JRE 文件夹作为一组 DirectoryComponent/File 包括在内。 File 有一个 Guid,它是固定的(我需要它们在我们的构建系统中可重现以允许引用它们)。我没有为新的 JRE 文件夹更新它们 m(现在我更新了,而且我将 JRE 文件夹(旧的和新的)安装到不同的目标文件夹(我最初的问题中的选项 #3)。再次感谢!