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
,因为它不是相关的包 - 它是 包。 OnDetectBegin
的 fInstalled
参数会告诉你是否安装了包。
源代码位于https://github.com/wixtoolset/wix3。 master 分支总是有最新版本的代码。
【讨论】:
非常感谢!我认为relatedbundle 被解雇了,因为我测试了好几次;可能每当它起作用时,我都会重新构建以使 dll 中的小变化成为捆绑包中的一部分,从而使其相关。以上是关于WiX Burn Bootstrapper 不调用 OnDetectRelatedBundle的主要内容,如果未能解决你的问题,请参考以下文章
Wix/Burn - 不运行 MSIPackage 的条件,因此不卸载应用程序