Question

We have a product similar to Microsoft Office. Several different applications with a lot of shared libraries. We’re trying to refactor the deployment process of this product as currently we’re using several individual MSI packages to install each application independently. While this is working, we would like to use the WiX bootstrapper to bundle these MSI files and create just one setup application. Currently all shared libraries are included in each MSI package, which takes a lot of space.

We have basically two options to achieve this:

  • Create one WiX setup (MSI) project; include all products as individual Features. In this case handling the shared libraries is pretty straight forward. But the structure of the project is getting too big in my opinion.
  • Create several MSI packages. Each with just one product and bundle them to the bootstrapper. In my opinion, this approach is more flexible and more clearly arranged in terms of files and components. However how do shared libraries work here? They should not be included in each and every MSI file.

Which approach is preferred in a WiX bootstrapper project?

Was it helpful?

Solution

One big MSI with many features is too hard to support.

It's easy to share components between MSIs. The shared components must have identical GUIDs and component key paths. See details.

To easily achieve this goal create a WiX Library project for all shared components (each component or component group in its own fragment). Then include the library into all WiX Package projects and reference its components (or component groups) in WiX Package projects.

OTHER TIPS

You can group shared components into several MSIs, then create one or more bootstrappers for your applications.

A couple key things to know:

  1. MsiPackages can be configured so when the bootstrapper installs an MSI, it shows or doesn't show the MsiPackage in "Programs and Features" (ARP) list.

  2. An MSI may or may have its own UI. In any case, you can suppress it in the MsiPackage element. If your really, really need to ask users something during installation, you can ask in a custome bootstrapper application and probably pass it to the MSI as an MsiProperty.

So, I suggest an MSI for each application and each group of shared components. And, one or more bootstrappers for one or application MSIs and the shared MSIs that they need. If you create a custom bootstrapper application UI (C++ or .NET), like Visual Studio and WiX itself do, your users can selectively install/uninstall your various applications using one bootstrapper.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top