What alternatives are there to ClickOnce?
What limitations are you experiencing with ClickOnce? When I don't use ClickOnce, I use NSIS (though you could use most other installer languages/systems) to make a runnable, self-installing application.
That is, when you run the download it is running the application, and there aren't any setup questions. There is a menu option, or a frequent-use detector that allows for permanent installation.
The two hard issues are:
- Settings files
- Local registry settings
For settings files, I use a remote web service to hold states, etc.
If you need local registry settings (file associations, etc.) then you need to do a proper install, but this can be done silently when the user is working with the application for the first time.
Squirrel: It's like ClickOnce, but it works.
Squirrel is both a set of tools and a library, to completely manage both installation and updating your desktop Windows application, written in either C# or any other language (that is, Squirrel can manage native C++ applications).
Squirrel uses NuGet packages to create installation and update packages, which means that you probably already know most of what you need to create an installer.
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 and use. Moreover, you can actually 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.