WiX Burn Bootstrapper 不调用 OnDetectRelatedBundle

Posted

技术标签:

【中文标题】WiX Burn Bootstrapper 不调用 OnDetectRelatedBundle【英文标题】:WiX Burn Bootstrapper does not call OnDetectRelatedBundle 【发布时间】:2015-10-07 10:54:46 【问题描述】:

我有一个包含多个 ExePackage 和 MsiPackage 元素的捆绑包。它是一个 perMachine 包(所有 Msi 和 Exe 包都是 perMachine 或 ForcePerMachine) 我用 C# 编写了一个自定义 BA;

安装它工作正常,修改,卸载,并且根据日志正确注册了 Bundle:

[06F8:0F3C][2015-10-07T11:12:32]i372: Session end, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\eb3fd6f6-0cb2-4999-84e9-7d71f5ab1551, resume: ARP, restart: None, disable resume: No
[06F8:0F3C][2015-10-07T11:12:32]i371: Updating session, registration key: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\eb3fd6f6-0cb2-4999-84e9-7d71f5ab1551, resume: ARP, restart initiated: No, disable resume: No

但是,如果我再次启动 Setup.exe,据我了解,当调用 detect() 时, OnDetectRelatedBundle 应该触发 - 它不会触发。 (afaik 它应该记录,此外我添加了我自己的 Engine.Log 条目,它不会触发)

在对注册表进行调查后(并在源代码中嗅探) 我发现密钥在 \HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft...

因为我打开了同一个包,所以应该使用同一个 UpgradeCode。

问题:

注册在wownode上可以吗,相关bundle的检测是否也在wownode上? (我没有 3.10 源代码,因为我找不到分支,但从 3.8 代码来看,以下关于写入/读取注册表的 const 似乎很有趣:

const LPCWSTR BURN_REGISTRATION_REGISTRY_UNINSTALL_KEY = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";

)

关于相关的捆绑检测,我还有什么遗漏的吗?

【问题讨论】:

【参考方案1】:

Burn 引擎永远不会为当前正在执行的包调用 OnDetectRelatedBundle,因为它不是相关的包 - 它是 包。 OnDetectBeginfInstalled 参数会告诉你是否安装了包。

源代码位于https://github.com/wixtoolset/wix3。 master 分支总是有最新版本的代码。

【讨论】:

非常感谢!我认为relatedbundle 被解雇了,因为我测试了好几次;可能每当它起作用时,我都会重新构建以使 dll 中的小变化成为捆绑包中的一部分,从而使其相关。

以上是关于WiX Burn Bootstrapper 不调用 OnDetectRelatedBundle的主要内容,如果未能解决你的问题,请参考以下文章

WiX Burn:从注册表中读取 LaunchTarget

Wix Burn:自定义引导程序升级,但与旧版本并排安装

Wix/Burn - 不运行 MSIPackage 的条件,因此不卸载应用程序

WiX 自定义操作在 MSI 中使用 [SourceDir] 和 Burn

(Un)在 WIX Burn 安装程序中安装 NSIS 包

WiX - Burn 支持两用 msi 包吗?