I have been evaluating the wide range of installation and web deployment solutions available for Windows applications. I will just clarify here (without too much detail, these tools have been covered in other questions) my understanding of the options:
-
NSIS - Free tool that generates setup executables. Small binary. Specialized, sometimes obtuse, scripting language.
-
Inno Setup - Free tools for setup executables. Various binary compression schemes. Pascal scripting engine.
-
WIX - Free toolset to generate MSI binaries. XML definitions language.
-
WIX ClickThrough - Additional tools for packaging, web download and auto update detection (now part of WIX core).
-
InstallShield - Commercial development environment for installation packaging. Generates MSI binaries. C-like InstallScript language.
-
Wise - Commercial development environment for installation packaging. Generates MSI binaries.
-
ClickOnce - Visual Studio supported framework for publishing applications to a webserver, with automatic detection of updates. No support for custom installation requirements (INI files, registry etc ...). Packages setup as an MSI binary.
-
Install Aware - Commercial development environment for installation. Generates MSI binaries. Automatic Update framework (Web Update).
If I have missed any, please let me know.
And found some useful discussions of these technologies on StackOverflow:
- Best Simple Install System
- Best choice for Windows installers
- Alternatives to ClickOnce
I have worked with a few of these solutions, as well as a handful of proprietary internal installation solutions. They are mostly concerned with packing installations and providing a framework for developers to access the run time environment. With the growing requirement for web deployment and automatic software updates, I expected to find more of a consensus among developers on a framework for web delivery of software and subsequent updates, I haven't really found that consensus. There are certainly solutions available (ClickOnce, ClickThrough, InstallShield Update Service), but they each have considerable limitations (please correct me if I mis-represent any of these). I would be interested in a framework that provided some of the following:
- Third party hosting/management of updates.
- Access to client environment (INI files, registry, etc..).
- User registration/activation.
- Feedback/Error reporting
This is leaving me with the strong impression that the best way to approach the web deployment problem is through a custom built proprietary solution (possibly leveraging existing installer packaging). I have seen this sort of solution work well for a number of successful applications:
- FileZilla - HTTP request to update.filezilla-project.org to check for updates, downloads an NSIS binary (I think) and then shuts down to run the install.
- Automatic updates for Massively Multiplayer games are entirely necessary and universally implemented using proprietary systems.
So, at last, to my questions:
- Have I missed a web deployment framework that will provide the functionality I need?
- Are my requirements too specific to reasonably expect a third party framework to deliver?
- Should I buy or build?