【发布时间】:2016-10-20 17:01:41
【问题描述】:
我正在开发一个安装 MSI 包和一些 .exe 包的 WiX 引导程序/捆绑安装程序。安装新包时,包安装程序需要能够升级其组件。最初我遇到了一个问题,即我的 ExePackage 组件在升级时被卸载,然后我了解到你可以通过在 ExePackage 元素中放置一个 dep:Provides 条目来避免这种情况。这解决了卸载升级问题,但现在我看到了一个问题,即 ExePackage 组件没有使用较新的捆绑安装程序进行升级。
我通过创建 2 个版本的捆绑安装程序对此进行了测试 - 一个带有 ExePackage 组件之一的较新版本。如果我安装较低版本的捆绑包,然后安装较新版本的捆绑包,似乎没有升级 - 它应该升级的一个 ExePackage 组件仍然是旧版本。但是,由 dep:Provides 元素创建的注册表项会使用新版本进行更新。然后,当我卸载捆绑包时,除了应该升级的 ExePackage 组件之外,所有内容都会被删除。
似乎缺少此场景和其他 WiX 场景的文档或示例。有人有这个场景的例子吗?
我的一个 ExePackage 元素看起来与此类似:
<ExePackage Id="BLAH_INSTALLER"
SourceFile="$(var.SolutionDir)\InputBin\BlahSetup.exe"
Compressed="yes"
InstallCommand="/install /quiet"
UninstallCommand="/uninstall /quiet"
DetectCondition="BlahPresent"
Cache="always" >
<dep:Provides Key="Blah" Version="5.0.0.0" />
</ExePackage>
我的 DetectCondition 逻辑是一个类似于下面的 FileSearch:
<util:FileSearch
Id="Blah_Installed"
Path="[ProgramFiles64Folder]\blah\blah.exe"
Variable="BlahPresent"
Result="version" />
【问题讨论】:
标签: wix upgrade bootstrapper burn