Search code examples
wixbootstrapperwix3.8

WiX Bootstrapper project structure


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?


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.