0
votes

I have a Wix Bundle Bootstrapper installing 2 MSI files. If I use the bootstrapper, the "Add/Remove Programs" list only contains the entry of the boostrapper.

If I use the MSI files separately, I get two separate entries in this list, one for each MSI file.

What's the officially documented way how the entries in the "Add/Remove Programs" list in Control Panel are built?

Specifically, they tell us -

Configuring Add/Remove Programs with Windows Installer

You can supply all of the information needed to configure Add/Remove Programs in Control Panel by setting the values of certain installer properties in your application's Windows Installer package. Setting these properties automatically writes the corresponding values into the registry. (...)

and they also tell us about the

Uninstall Registry Key

The following installer properties give the values written under the registry key:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall

The values are stored in a subkey identified by the application's product code GUID.

But it's not obvious whether having an entry here is sufficient, and what subkey or value entries are required.

1
This topic is still largely undocumented. Some unofficial documentation from NSIS and WindowsSucks blog (what an adequate name ;-)).zett42
You have to realize that ARP and Windows Installer do not depend on each other. Windows Installer can create an ARP entry simply for the convenience of the publishers and users. Windows Installer documentation is going to say how to do that but it's not going to say how ARP works. (But based on your acceptance of an answer, this was an XY Problem, anyway.)Tom Blodget
@TomBlodget - no it wasn't an XY problem. But the accepted answer highlighted the very point you note, so it was good enough.Martin Ba

1 Answers

4
votes

I am honestly not quite sure what the exact question is - but I will give it a go. The Burn feature of WiX will create a single entry in Add / Remove by suppressing the individual MSI files from showing up in the add / remove list.

Under the hood this is done by setting the ARPSYSTEMCOMPONENT property during installation equal to 1 (or they achieve the same effect by some technically different, but functionally equivalent way that I am unfamiliar with).

You can set this property yourself during installation (specified as a parameter to msiexec.exe) to hide any MSI from the Add / Remove list. Technically it will translate to a DWORD registry value SystemComponent = 1 written to the MSI's uninstall registry key (there are several different ones depending on the type of install and MSI architecture):

  • 64-bit: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{ProductCode}\
  • 32-bit: HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{ProductCode}\
  • Per-User: HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\{ProductCode}\

You can opt to show all MSI files you install with Burn in the Add / Remove list. You just set the Visible attribute to yes:

<MsiPackage SourceFile="MyMsi.msi" Visible="yes" />

That is just the MsiPackage element - you obviously need to insert it into a proper Burn source file with Chain, Bundle and Wix elements. Here is a larger sample. And here is a sample of customizing the WiX Burn GUI. And I will throw in a link to the WiX tutorial as well, on Bootstrapping.

Note that I think the Burn entry in Add / Remove will probably always be visible - in addition to the individual MSI packages / EXE packages. There might be a way to customize this too that I am not familiar with.