This might be a bit more rant than answer but here it goes.
If there is one thing severely broken with Windows client software it is the deployment of applications.
My experience comes from working on NovaMind - Even though I have spent weeks over the years on setup issues, I am by no means an expert in setup technology and I try to focus on our actual product whenever possible. We have used InnoSetup, Visual Studio Setup Project 2008/2010 and finally we have switched to the WiX + Tools approach.
How do you install an application nowadays?
Web Apps: Enter a url in a browser to get to a web app.
Mac: Drag the downloaded file (same for x64 and x86) to the Applications icon on the Mac. Done.
Windows: Download the right file (user needs to know about x64 and x86 architecture), execute it. Click 'Next' a dozen times, wait for the UAC to show, Click yes and then hope that the installer did the right thing.
I think if Windows would have had a better deployment system, a sane marketplace/app store and a proper live update feature web apps might never have gotten that popular in the first place. Of course that's an exaggeration but I believe a lot of damage has been done to the Windows applications ecosystem by not providing a sane, usable deployment model and even now Microsoft seems to pay very little attention to this problem.
How do you update applications nowadays?
Web Apps: No need. It is up to date.
Mac: No inbuilt magic but there is a widely used and powerful solution called Sparkle.
Windows: You better roll your own because there is nothing substantial out there.
ClickOnce should have changed all of this but failed to be useable for real commercial applications.
Here is the rundown:
InnoSetup and other script based installations are simple but cannot produce a .msi file - Some companies require .msi files to automate network deployments.
Visual Studio Setup Project 2008/2010: Gives you the basics easily and you can configure a bunch of things but once you want to do the unthinkable like use a high quality icon or include a changing set of files into your setup you are screwed. We also had to manually fix the PackageCode and ProductCode every single time we build an update since Visual Studio managed to somehow mess up the assembly versions and would leave an older assembly when updating thus corrupting the application.
WiX is the de-facto way to create setups on Windows and even the Microsoft Office Setup is supposedly created with WiX. WiX is not simple. There are books available for WiX!
Unfortunately WiX alone is still not a good solution. We use the dotNetInstaller bootstrapper project to ensure the .NET Framwork is installed and to wrap the msi file and the bootstrapper into a single .exe file that people can download.
With all this you are mostly fine. There are always strange cases were customers don't have the Windows Installer installed (and thus cannot run the embedded msi file) or were the .NET Framework installation fails.
Things we haven't been able to do so far:
- Localizing our installer!
- Providing a single download for both x64 and x86 - at the moment we only create a x86 installer because we don't want our users to think about x64 vs. x86.
- Have a nice setup UI that also works with high DPI settings. I think this might just be a thing that is not supported in MSI setup.
For live updates we have rolled our own solution and after many issues it is working okay.
You might also want to listen to Scott Hanselman's podcast episode with Rick Brewster were they talk about the setup and deployment of Paint.NET - While I congratulate Rick and the Paint.NET team on their good setup, the necessity of such a complex solution saddens me.
As it stands I would recommend WiX to anyone who wants to create an installer on Windows but in the end I am extremely frustrated with the deployment situation on Windows. I have wasted weeks of my time over the years with silly setup issues. With setup you can only lose. You won't win any happy customers because your setup works but you will lose and frustrate a lot of them if it doesn't.