We have a product that we need to create an installer for. It has a number of components which can be installed or not as the situation demands.
When we ship our installation package, we want to be able to have that include any number of additional components to be installed.
For example, Foo Manager Pro contains:
- Foo Manager Console
- Foo Manager Database
- Foo Manager Services
That might be shipped as something like:
- FooManagerInstaller.exe
- FMPConsole.pkg
- FMPDatabase.pkg
- FMPServices.pkg
A package might consist of something like:
- Manifest
- Files to be deployed
- Additional scripts to be executed
(eg find file foo.config, do some XML Manipulation)
If a client wants to add custom skins and a series of plugins as part of the install, they create their own packages:
- FMPConsoleSkins.pkg
- ClientWebservices.pkg
If that client then ships it to someone else who wants to add more customisation - they can do so in the same way.
We can build this from scratch - but wanted to check if this sort of install system already exists.
We already have a set of NAnt scripts which do something not too far from this. But they're difficult to maintain, and quite complex. They don't offer any of the 'niceties' that we'd expect from an installer (like tracking deployed files and removing them if the install fails).
We've been looking a little bit at NSIS and building MSIs using WiX, but it's not clear that these can offer us the capability for downstream to provide additional packages, without inventing our own installer language.