1
votes

I have a wix burn bundle with Visible="yes" for all MsiPackage elements. After a new install or upgrade, as expected each MSI package appears in Add/Remove Programs, including an an entry for the bundle. However, when I do a repair of the bundle after an upgrade, all MSI entries unexpectedly get removed from Add/Remove Programs. If I do a repair after a fresh install, all entries in Add/Remove programs remain intact.

The upgrade that I am doing is not actually from a previous version of the bundle. Rather some MSIs are already installed and the bundle upgrades some of these MSIs. This will be the case for our customers because we have shipped MSIs for a long time, but this is the first time we are planning on shipping a burn bundle.

Has anyone else seen this unexpected behavior with repair?

I'm using Wix Toolset version 3.10 and I have a managed bootstrapper application. I am not sure what I could be doing wrong with the repair in my managed bootstrapper application to trigger this problem. Perhaps this is a bug in burn?

1

1 Answers

0
votes

The answer is no. No one else is likely likely to see this exact problem on repair. This is because the problem was caused by very specific and peculiar bug in two of our MSIs.

For example, one MSI had the following entry in the RemoveRegitryTable...

RemoveRegistry   = RemoveIconRegKey
Root  = 2   
Key = Software\Microsoft\Windows\CurrentVersion\Uninstall\[UPGRADE_1]     
Name    = -
Component_  = RemoveIconRegKey

... and, during a repair, UPGRADE_1 was not set.

Although it was a bug, we had not caught this problem for years. We are just now switching to burn and the problem was triggered by the way in which burn does repairs. Specifically, burn sets the REINSTALL property. That is, only when the REINSTALL property is specified does the RemoveRegistryValues action get re-run for components that are already installed. Although the action is re-run, the UPGRADE_1 property is not set during a repair, causing all of the 64-bit Add/Remove program entries to be removed.

Also, I realize now that there is no way that burn could wipe out all add/remove program entries while a single MSI is being installed. I'm pretty sure that burn hides add/remove program entries by passing ARPSYSTEMCOMPONENT=1 on the command line to each individual MSI that is to be hidden.