Hello,
We have products of which the user can choose between per-machine and per-user. For example, we have Product A and Product B. The user can choose between Product A per-machine and Product A per-user. The same applies to Product B.
One difference between per-machine and per-user products is that the per-machine product includes a Windows service (let's say an upgrade service) while the per-user includes a standalone upgrade application.
For historical reasons we have been including these products in a per-machine .aip and a per-user .aip. We add the components required by Product A and Product B per-machine to the per-machine .aip and the components required by Product A and Product B per-user to the per-user .aip (even on the same feature!).
Even worse, we have four .aip's; per-machine .aip, per-machine upgrade .aip, per-user .aip and per-user upgrade .aip.
per-machine .aip and per-machine upgrade .aip outputs a Single MSI while per-user .aip and per-user upgrade .aip outputs a Single EXE setup. The difference between non-upgrade and upgrade .aip's is that we skip checks in upgrade builds (like prerequisites), we provide a different UX, etc.
When Product A changes for some reason (let's say we need to include a new file in the installation) we have to modify per-machine .aip, per-user .aip and then replicate the changes in per-machine upgrade .aip and per-user upgrade .aip, which is crazy.
To solve this problem we decided to create merge modules. We have Product A per-machine and Product A per-user merge modules, and Product B per-machine and Product B per-user merge modules. This way we get some benefits like each product team can work on their merge modules and they only need to update two merge modules. We then have to merge the modules into the "main" four .aip's.
Do you think there is a better way to solve the problem? As a side note we are working on getting rid of the upgrade .aip's so we could end up with two main .aip's instead of four.
So we went to Advanced Installer, cleaned the .aip's, added the merge modules to each .aip and built the .aip's but we found that the per-machine .aip's, which output a .msi, did not build. We got "Your project must contain at least one component (file, registry entry, etc.) before this operation can be performed.". This makes sense because we did not include components directly into the per-machine .aip's. However after the merge the package will end up with components.
Is there a way to avoid the error without having to add a dummy component?
Do you think that our approach is correct?
We may be overlooking some Advanced Installer functionality that could help with our complexity. We have Advanced Installer Enterprise.
Thanks,
Nicolás.