如果检测到相同版本,则升级引导程序包。

16

我有一个WiX引导程序包:

<Bundle Name="blah" Version="1.0.0" Manufacturer="blah" UpgradeCode="some-guid-string">

当我生成新的构建并尝试在之前的安装上安装它时,引导程序应该升级自己(因为它是相同的版本),但是它会在“程序和功能”中留下旧版本。如果在同一版本上进行安装,我该怎么做才能完全卸载先前的版本?如何从“程序和功能”中删除旧版本?我已经在网上查找过,但是关于此主题没有明确的答案。
编辑:这个问题提示使用自定义BA通过更改OnPlanRelatedBundle中的请求状态来覆盖默认的无操作行为。我不确定人们指的是什么,或者我如何钩入OnPlanRelatedBundle...有人能澄清吗?自定义BA=自定义构建动作吗?
4个回答

9
抱歉,重新启动旧帖子,但由于目前WiX 3.10仍不支持本地化,因此我认为我应该发布我的解决方法。这种方法的警告是,双击刚安装的软件包将不会弹出通常的“修改、卸载”对话框。我所做的处理是放置一个<bal:Condition>,提示用户如果想要调用卸载或修改功能,则使用“添加/删除程序”。我需要这样做的原因是,我们有在线和离线软件包。我想防止它们同时安装。这种方法需要的另一件事情是,您的软件包版本ID必须与您的MSI版本ID匹配。足够的免责声明,以下是具体步骤:创建产品搜索,但重要的是,使用您的MSI软件包的UpgradeCode,而不是Bundle的!ProductSearch永远无法找到Bundle的GUID,因为Bundle是.exe而不是MSI。
<util:ProductSearch
        Variable="BundleAlreadyInstalled"
        UpgradeCode="MSI-GUID-NOT-BUNDLE-GUID"
        Id="BundleAlreadyInstalledSearch"
        Result="version"
                />

接下来,在您的<bundle>元素内添加以下内容:
<Variable Name="CurrentVersionNumber" Type="string" Value="$(var.Version)" />
<bal:Condition Message="Tell your user to use Add Remove Programs here.">
    NOT WixBundleAction = 5 OR NOT BundleAlreadyInstalled = CurrentVersionNumber
</bal:Condition>

这里的核心是我们使用MSI的版本号作为关键指标来判断该捆绑包是否在目标系统上存在(正如我所说,必须与捆绑包的版本号匹配)。
如果您不包括“NOT WixBundleAction = 5”,则将无法卸载应用程序,这是非常重要的。
至于第二部分,我们想要特别检测此版本是否已安装。升级和降级将失败此测试,这正是我们想要的,因为正常逻辑会启动并执行您的升级/降级。
如果没有这个逻辑,我的用户可能会同时安装在线和离线版本的捆绑包。主要原因是WiX生成了Bundle@Id。另一个更隐晦的问题,这种方法可以解决,即仅重新构建未修改版本的捆绑包也可以允许您并排安装!所有这些都会在“添加/删除程序”中产生重复条目。
这几行代码可以完全避免这些问题。正如我所提到的,权衡是安装并随后再次运行确切的捆绑包将不会触发卸载对话框,但是这比重复的ARP条目容易处理得多。特别是因为您可以在错误消息中提供说明。

一个不错的解决方法。请注意,当您有一个 mba 时,此方法无法工作,因为它使用了 bal - Shique

2
尝试在您的引导程序中指定RelatedBundle元素。
<RelatedBundle Id="THE-BUNDLE-UPGRADE-GUID" Action="Upgrade"/>

0

v4.0 更改了默认行为,使其在版本相同时进行升级。

在 v3.x 中,您需要一个自定义的 BootstrapperApplication。


-1

我找到了一个解决问题的方法,而不需要修改WiX烧录源代码。

我禁用了我的引导程序捆绑包在“程序和功能”中显示:

<Bundle DisableRemove="yes" DisableModify="yes" ... />

我并不是真的需要它显示出来。我只需要它捆绑和安装的软件包显示出来就可以了。然后,我只是让它显示它安装的MSI软件包:

<MsiPackage Visible="yes" ... />

3
你很可能仍在安装重复的软件包,只是在“添加和删除程序”中看不到它们... - BoilerBrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接