修复Wix Bundle后缺少添加/删除程序条目

时间:2016-06-12 15:27:11

标签: windows wix burn repair

对于所有MsiPackage元素,我有一个带有Visible =“yes”的wix刻录包。在新安装或升级之后,正如预期的那样,每个MSI包都会出现在“添加/删除程序”中,包括该捆绑包的条目。但是,当我在升级后修复捆绑包时,所有MSI条目都会意外地从“添加/删除程序”中删除。如果我在全新安装后进行修复,则添加/删除程序中的所有条目都将保持不变。

我正在进行的升级实际上不是来自以前版本的捆绑包。而是已经安装了一些MSI并且捆绑包升级了一些这些MSI。对于我们的客户来说就是这种情况,因为我们已经发布了很长时间的MSI,但这是我们第一次计划发送烧录包。

还有其他人在维修中看到过这种意想不到的行为吗?

我正在使用Wix Toolset 3.10版,我有一个托管的bootstrapper应用程序。我不知道在我的托管引导程序应用程序中修复我可能做错了什么来触发这个问题。也许这是烧伤中的一个错误?

1 个答案:

答案 0 :(得分:0)

答案是否定的。没有其他人可能会在维修时看到这个确切的问题。这是因为问题是由我们的两个MSI中非常具体和特殊的错误引起的。

例如,一个MSI在RemoveRegitryTable ...

中有以下条目
RemoveRegistry   = RemoveIconRegKey
Root  = 2   
Key = Software\Microsoft\Windows\CurrentVersion\Uninstall\[UPGRADE_1]     
Name    = -
Component_  = RemoveIconRegKey

......并且,在修复期间,UPGRADE_1未设置。

虽然这是一个错误,但我们多年来没有发现这个问题。我们刚刚转向燃烧,问题是由燃烧修复的方式引发的。具体来说,burn设置REINSTALL属性。也就是说,仅当指定了REINSTALL属性时,才会为已安装的组件重新运行RemoveRegistryValues操作。虽然重新运行该操作,但在修复期间未设置UPGRADE_1属性,导致删除所有64位添加/删除程序条目。

此外,我现在意识到,在安装单个MSI时,烧录无法消除所有添加/删除程序条目。我很确定刻录隐藏通过将命令行上的ARPSYSTEMCOMPONENT = 1传递给要隐藏的每个MSI来添加/删除程序条目。