WiX Burn Bootstrapper不会调用OnDetectRelatedBundle

时间:2015-10-07 10:54:47

标签: c# wix windows-installer burn

我有一个包含多个ExePackage和MsiPackage元素的Bundle。它是一个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上是否可以,并且相关包的检测是否也会查看Wownode? (我没有3.10源代码,因为我找不到分支,但是从3.8代码中,关于编写/读取注册表的以下const似乎很有趣:

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

关于相关捆绑检测,我还能错过什么?

1 个答案:

答案 0 :(得分:1)

Burn引擎永远不会为当前正在执行的包调用OnDetectRelatedBundle,因为它不是相关的包 - 它是 包。 fInstalled的{​​{1}}参数会告诉您是否安装了捆绑包。

源代码位于https://github.com/wixtoolset/wix3。主分支始终具有最新版本的代码。