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?
- If your specific requirements are core to your business; ie part of your business is to provide a smooth and user-friendly deployment/installation and you feel that none of the available deployment libraries can let you achieve this, then certainly go ahead and build your own.
- If your specific requirements would be nice to have but they do not make a significant part of your business; ie the end user will not typically be expecting or needing a smooth installation procedure, or will never need to do that themselves (ie they pass that step onto their IT department), then the need to build your own just for your own specific requirements is likely to be outweighed by the extra effort that would involve.
I think that your impression that you will be needing a custom solution is a sound one; it seems like your requirements are going to be key to the experience of your product, especially if you need really smooth automatic updates and feedback.
I would urge caution on Installaware. We recently had a shocking experience with their customer support.
We followed one of their sample projects to the letter which failed miserably. Raised a support ticket with customer support and were told it was going to cost us $199 for them to look at fixing their own code.
We then raised the same issue in the user forums and were promptly banned because this constituted cross posting and was not allowed. Even though this is not mentioned in their terms and conditions. In fact, they banned our IP so no one in our company can post to the forums.
A very poor experience and one we wont repeat. We are now looking to replace Installaware as soon as possible.
Purchase Installaware at your own peril.
Absolutely agree with poster who said to stay away from InstallAware. They've had a long history of really absurd ethics problems, and they treat their own customers horribly. They can be downright abusive and insulting.
Beware InstallAware!
I completely agree about InstallAware.
After using WiX, NSIS and InstallAware, I have to humbly admit that they were all overkill for what I really need as a software developer. There are no projects that I've done so far which couldn't be deployed using the Visual Studio deployment project.
Is it limited? Yes.
It is also very simple to learn an use. Moreover, you actually can do really neat things like automatically create patches (.MSP files) by using techniques as described here
I fully understand that you can't do everything inside of a Visual Studio setup project, but it's rather surprising what you can accomplish. It's free, it's easy and, frankly, for general use is a better option than spending endless hours learning WiX's mind-boggling XML (impressive as it is), or InstallAware's verbose scripts...
With VS Setup, it's drag'n'drop & build'n'deploy. Every other solution I've tried had set backs... they can't automatically detect your project output... or need special filters so as not to include unwanted outputs from the build.
My suggestion is thus: If you simply wish to get your project deployed, then learn:
- How to build a custom installer class, and
- How to author your own pre-requisite packages
These are both reasonably easy skills to master, and satisfy the needs of most developers.