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

Ale*_*dru 14 .net windows-installer wix bootstrapper burn

我有一个WiX bootstrapper包:

<Bundle Name="blah" Version="1.0.0" Manufacturer="blah" UpgradeCode="some-guid-string">
Run Code Online (Sandbox Code Playgroud)

当我生成一个新的构建并尝试在之前的安装中安装它时,引导程序应该自行升级(因为它的版本相同),但是它会在程序和功能中留下旧版本.如果在同一版本上安装,我该如何完全卸载以前的版本,如何从程序和功能中删除旧版本?我已经在线查看,但没有关于这个主题的明确答案.

编辑:此问题提示使用自定义BA通过更改OnPlanRelatedBundle中的请求状态来覆盖默认的无操作行为.我不确定这是什么意思,或者我如何能够加入OnPlanRelatedBundle ......任何人都可以澄清一下吗?自定义BA =自定义构建操作吗?

小智 7

很抱歉恢复旧帖子,但由于WiX 3.10仍然没有本机支持,我想我会发布我的解决方法.

这种方法的警告是,双击刚刚安装的软件包不会显示通常的"修改,卸载"对话框.<bal:Condition>如果他们希望调用卸载或修改功能,那么我所做的就是指示用户使用"添加删除程序".

我之所以需要这个,而不仅仅是增加版本来执行升级,是因为我们有在线和离线捆绑.我想阻止他们同时安装.

此方法需要的另一件事是您的软件包版本ID与您的MSI版本ID匹配.足够的免责声明,这是方法:

创建产品搜索,但重要的是,使用UpgradeCodeMSI包,而不是捆绑包!ProductSearch永远不会找到您的Bundle的GUID,因为Bundle是.exe而不是MSI.

<util:ProductSearch
        Variable="BundleAlreadyInstalled"
        UpgradeCode="MSI-GUID-NOT-BUNDLE-GUID"
        Id="BundleAlreadyInstalledSearch"
        Result="version"
                />
Run Code Online (Sandbox Code Playgroud)

接下来,在<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>
Run Code Online (Sandbox Code Playgroud)

这里黑客的核心是我们正在使用MSI的版本(正如我所说的那样,必须与Bundle的版本相匹配)作为该捆绑包是否存在于目标系统上的关键指标.

如果您不包含NOT WixBundleAction = 5,则无法卸载该应用程序,这很重要.

至于第二部分,我们想要具体检测是否已安装此版本.升级和降级将无法通过此测试,这是我们想要的,因为正常的逻辑将启动并执行升级/降级.

如果没有这些逻辑,我的用户可以同时安装捆绑软件的在线和离线版本.主要原因是它Bundle@Id是由WiX生成的.这个修复的另一个更微妙的问题是简单地重建Bundle而不修改Version也允许你并排安装它!您将在"添加删除程序"中获取所有这些条目中的重复条目.

这几行代码完全阻止了这些问题.正如我所提到的,权衡是安装,然后再次运行确切的捆绑包不会触发卸载对话框,但这比重复的ARP条目更容易生存.特别是因为您只需在错误消息中提供说明即可.


Ale*_*dru -1

我找到了解决问题的方法,无需修改 WiX 刻录源代码。

我禁止我的引导程序包显示在程序和功能中:

<Bundle DisableRemove="yes" DisableModify="yes" ... />
Run Code Online (Sandbox Code Playgroud)

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

<MsiPackage Visible="yes" ... />
Run Code Online (Sandbox Code Playgroud)

  • 您很可能仍在安装重复的捆绑包,只是在“添加和删除程序”中看不到它们...... (3认同)