I am currently studying the vagaries of WiX and the Windows installer, and I hit a stumbling block.
The project that I am currently packaging consists of six discrete pieces. Now let's call them A, B, C, D, E, and F.
Chunk A is a collection of shared libraries and utilities that are used by every other project. It does not provide any end-user features.
Chunk B is another set of shared libraries and utilities that require features provided by Chunk A. This seems strange, but the architecture goes beyond my ability to influence or control.
Chunk C is the third set of shared libraries and utilities that require features provided by pieces A and B. This seems even weirder than before, but I still have no way to change that.
Chunks D, E, and F all require the functionality provided by pieces A, B, and C.
If possible, I would like to make sure that there is only one installation of pieces A, B, and C, which are shared between settings D, E, and F. I gained confidence that pieces A, B, and C maintain stable APIs so that they could be updated without impairing the functionality of D, E or F.
I immediately thought of creating merge modules for components in A, B, and C, and then linking to them in the functions provided by individual installers for D, E, and F. This would inflate the installers, but it would ensure that the necessary components were installed . Unfortunately, I am afraid that during the upgrade it may cause problems with Windows Installer validation.
Another thought is that I had to make one installer for A, B and C and require it in the installers for D, E and F via ComponentSearch.
Does any idea make sense? If no idea makes sense, do you have any recommendations regarding the correct way to implement it?