- Installshield
- Visual Studio
- NSIS
- other ...
Why?
Advantages?
Disadvantages?
Why?
Advantages?
Disadvantages?
Hi
I've been using both Visual Studio and WiX to create MSI installers.
Both are far from perfect in my opinion.
Visual Studio is only good for simple setups which use the default settings of the wizard. Customizing is a pain.
WiX is powerful, but I had to upgrade several times to the latest developer snapshots to get localization working and the documentation is very poor.
I would be very interested in hearing about other people's experience with installer technologies.
I love NSIS -
Note that I haven't used InstallShield for several years, so my criticisms may not be valid anymore.
One last thing, if you do use NSIS I strongly recommend you investigate the LogicLib plugin. It adds constructs like "If...End If", "While/For loops", "Switch" statements, etc.
After trying several, including Visual Studio, Wise for Windows Installer, and Tarma (now gone bust) - we settled for Advanced Installer
Advantages are:
Disadvantages
Definitely worth investigating to see if it meets your requirements
I've used InnoSetup for all my installers so far and I'm very happy with it's scripting functionalities.
Key Features (taken from Product Home Page)
(My) Pros:
(My) Cons:
Hi, For small applications, Setup Project from Visual Studio is great, and it's really easy to prepare installer and integrate it with build comp. The next option is Inno Setup 5. I have been using this tool for ages. I've started doing installations in Delphi 5/6 age and recently I prepared installer for .NET 2.0 application. And it's small, fast and full of customization options. All advanced things you can write there using VB script syntax.
Visual Studio for the Package One (simple) and more often I use the Publish with ClickOnce for Installer (easy for deployement across all the company and automatic update).
After considering an upgrade to the latest InstallAware from the version that comes with Delphi 2007, I actually plumped for Setup Factory by Indigo Rose.
InstallAware was (and is) a pretty competant tool but it was incredibly expensive for me (one-man micro ISV). Setup Factory looks a little quirky, and it's certainly not the most obvious of tools to use, but underneath it there's a lot of flexibility and functionality and I still feel like I made a good choice. It copes fine with things like SQL Express, bits of .Net runtime and the pieces that make up my Delphi applications.
In years gone by, I was a big fan of Wise but my version got more and more out of date (I was at version 8.0 of Wise InstallMaster) and the cost of cross-grading to their current product was high (not to mention I'd have to relearn or adapt a lot of what I already had).
In the end, I figured if I was going to spend time and money then I might as well evaluate some of the other options, hence InstallAware and ultimately Setup Factory.
Had I not picked Setup Factory I would have spent some time with InnoSetup, as several Delphi developers suggested it to me, all independently of each other.
The easiest way I've seen so far is using Visual studio, however it only really works for .Net/Windows projects...
Here are a few alternatives:
I've tried install4j which is pretty good event if it takes a little time to get used to.
The Java Service Wrapper is really good and quite intuitive if you want to wrap up a java application to run as a service/daemon under either Windows or Linux.
Also look at Wix which although difficult to use it very powerful.
Have you looked at a product from MacroVision called InstallAnywhere [http://www.acresso.com/products/ia/installanywhere-overview.htm]. I've used this product before and it allowed you to quickly create a professional looking installation. A nice side feature is the ability add functionality to the tool via Java based plugins.
You should use a microsoft windows installer based one.
wix is for free. you can find it here: http://wix.sf.net
if you understand german, there is a german tutorial in the magazine "entwickler magazin".
dont use legency installers like nsis or inno setup. they can do installs for vista but if you are using those, your software cant be called "made for windows"/"Vista compatible"
Currently we use Installshield 2008 Premier Edition
There's a really nice GUI for creating the installers, and then for the actual build we use the command line interface. We build about 20 installer variations (English) for the same product, plus additional variations in German. Adding another 4 languages once the product localization is completed.
Installshield 2008 is a great improvement over Installshield 12 (which the company was using when I started), a much cleaner uninstall process.
Advantages
Disadvantages
If you're distributing Windows software then learn the MSI fundementals. I highly recommend purchasing The Definitive Guide to Windows Installer it's an invaluable reference. All examples in the book use Visual Studio + Orca, but the technology can be applied to any application used to build MSI files.
I plan to move to WIX inside the next 6 months to complete automation of the installer build process, currently I'm happy that we've automated 95% of it using the Installshield command line.
In summary, if you're developing commercial software you have to decide how valuable your time is. Installshield is great, easy to get started with and you'll be up and running in a few days for a simple application. If you're planning to distribute localized software and installers, I really can't emphasize just how easy this is to do with Installshield Premier.
WIX is free, but comes with a steep learning curve and I wouldn't touch it with a 10 foot pole until you understand how Windows Installer and MSI files work, with no knowledge of Windows Installer using WIX is going to set you back quite a while while you get up to speed on Windows Installer. While Installshield will abstract all the underlying details until you decide you want to go poking around, WIX throws you right in the deep and you better learn to swim - fast!
Update: 6 months after writing this, I began migration to WiX 3.0 and am now about to move to WiX 3.5 -- it took me nearly six months to really get to grips with WiX, but if you are developing for Enterprise deployments and want to get "under the hood" in comparison with InstallShield then it's worth investing the time. I don't regret it.
Right now we use InstallShield 2009 Professional to do all of our product installation. The main advantage to using it right now isn't really a great one - it's what we have used in past versions of our product. However, for the most part putting together an installation database and merge modules is relatively difficult to learn, and adding new features and components to the installer can often be a nightmare - especially in cases where the new feature is in a different source tree than our original.
Adding dependencies and feature level setup doesn't really lend well to ease of use. In fact, the documentation that I find myself relying on regularly is over 1000 pages long in PDF format, and half the time I don't even know what I'm supposed to be searching for.
We are currently getting ready to start development on some major changes. One that may come into play will be updating or outright removing InstallShield 2009 in something more favorable for use. It appears you already got a good answer, but I felt like putting in my two cents might help too. I'm definitely glad this question was asked, I know I was curious.
For Windows-specific installers, I think all the good alternatives have already been mentioned (NSIS, InnoSetup, Wix). If you need to support software that runs in multiple platforms, such as a Java application, you may consider the BitRock cross platform installer (by yours truly), IzPack (open source, written in Java) or InstallAnywhere (also referenced above, significantly more expensive). If you could provide more information on what you are trying to accomplish and what kind of program you are trying to package, it may help with recommending the best alternative
For Windows-only or cross-platform installers, I use InstallJammer. Probably because I wrote it, but I'd still use it even if I hadn't. I think. :)
It's cross-platform, fast and very easy to use, but it also has a powerful scripting language underneath the actions that let you do just about anything you could want.
I wouldn't recommend InnoSetup for any kind of modern, enterpise installer. Most of its "features" are pretty standard installer features. It is difficult to find an installer that doesn't support all versions of Windows, edit the registry, compress files, provide a wizard interface, support uninstall etc. And as for features like "Integrated Pascal scripting engine."... Is that a feature?
Also, InnoSetup doesn't seem to address quite a large number of things that are critical to modern day installers. I would be more interested in an installer that can handle: - .NET Framework installation and intergration - SQL compact installation - Windows Media Framework Installation - Ability to call out to custom managed code
Unless you are writing an application with limited distribution (and probably one that isn't in .NET), I would consider using something more modern and more supported.
We are distributing our application to potentially hundreds of thousands of users, so the cost of the site license for the installer is irrelevant. We use Installshield because so many other companies do, which means that users are used to the standard InstallShield interface. Do not underrate this factor. If people have a quick installer a that looks and behaves exactly as they expect, it can radically affect the success of the product. Also, when I'm having trouble downloading and installing some complicated dependency on x64 architectures, it is somewhat more comforting to have InstallShield support that some Delphi Source Code from the late 90s.
Sure, Installshield definitely has its quirks and weaknesses. It attempts (sometimes successfully, sometimes not) to minimize the amount of work you need to do to get started but to still give you the control to step in and fix things at a low-level if need be.
Despite its annoying traits, we have gone from pretty much zero installer knowledge to being able to produce a very complex (but simple to the user) installer that installs a fair number of dependencies on various XP and Vista configurations. I'm almost certain we would have dead-ended had we chosen InnoSetup. And that dead-end cost is far greater than any licensing cost.
Here is another option that haven't been mentioned: Wix# (written by Oleg Shilo). If you are planning to deploy .NET apps, this may be worth considering. Here is an intro article explaining how to use it: "Wix# (WixSharp) - managed interface for WiX" (make sure you read comments: they discuss some limitations of Wix#).
For regular (non-NET apps), I would use NSIS (I've seen it used by lots of popular apps, such as WinAmp). In case you're interested in additional resources, check references at the end of this post: "Dude, where is your installer?" (sorry for the self-promo, but I hope that some of the references from the post will be helpful).
I know two answers already mention Installshield, but I"ve been writing installers for years and have a few insights not previously mentioned, I think. We're using Installshield 2009 Professional for our installers at our current company.
Pros:
Cons:
I realize there are more cons than pros here, but really if your installer needs to do a lot under the hood (connect to databases, massage XML files and the like) then you should at least give Installshield a serious look.
I won't use any Windows installer based technology anymore.
One to many instances of touch datafile causes datafile to not be updated by the installer anymore.
This post "summarises" what I've learnt over the last 2 years to deploying a WPF application on Sony Vaio, Dell, HP and Compaq laptops and desktops. This includes Windows XP, Vista and Windows 7. You'll notice I've already posted an answer to this thread. With hindsight, that answer is wrong. Here is my revised post for choosing your installer:
Basically, DON'T USE WINDOWS INSTALLER
This includes:
Basically, it adds mammoth amounts of completely unnecessary complexity. This world is really not that well documented and it is clear people don't really understand it very well. You'll spend hours going through log files that look like this:
MSI (s) (EC:B8) [08:54:14:380]: Executing op: > FeaturePublish(Feature=es_MX,,Absent=2,Component=az3MEZ&x8?en(+YC2W5q1l{?GHKrE?@i*4t9f=D1) MSI (s) (EC:B8) [08:54:14:381]: Executing op: FeaturePublish(Feature=nl_NL,,Absent=2,Component=(83)&q@Q?=}][4g6A=%odsJ4[$60LA?WI-_o]kLw) MSI (s) (EC:B8) [08:54:14:384]: Executing op: FeaturePublish(Feature=pt_BR,,Absent=2,Component=RDn,Ybl&,=hO?1s6]x+S) MSI (s) (EC:B8) [08:54:14:386]: Executing op: FeaturePublish(Feature=zh_HK,,Absent=2,Component=8va*[*{v7=_fmB!*Jbfj9bJ*PmjeT9UXFwkDPRg8) MSI (s) (EC:B8) [08:54:14:389]: Executing op: FeaturePublish
Wondering what Absent=2 means. Then you'll Google it and realise that lots of other people are doing the same and they don't have a clue either. For example, the potential screenflow of the Windows Installer is:
AppSearch, CCPSearch, CostFinalize, CostInitialize, ExecuteAction, FileCost, FindRelatedProducts, ISPreventDowngrade, ISSetAllUsers, InstallWelcome, IsolateComponents, LaunchConditions, MaintenanceWelcome, MigrateFeatureStates, PatchWelcome, RMCCPSearch, ResolveSource, SetAllUsersProfileNT, SetupCompleteError, SetupCompleteSuccess, SetupInitialization, SetupInterrupted, SetupProgress, SetupResume, ValidateProductID
But there is also the execution flow which is:
AllocateRegistrySpace, AppSearch, BindImage, CCPSearch, CostFinalize, CostInitialize, CreateFolders, CreateShortcuts, DeleteServices, DuplicateFiles, FileCost, FindRelatedProducts, ISPreventDowngrade, ISSetAllUsers, InstallFiles, InstallFinalize, InstallInitialize, InstallODBC, InstallServices, InstallValidate, IsolateComponents, LaunchConditions, MigrateFeatureStates, MoveFiles, MsiPublishAssemblies, MsiUnpublishAssemblies, PatchFiles, ProcessComponents, PublishComponents, PublishFeatures, PublishProduct, RMCCPSearch, RegisterClassInfo, RegisterComPlus, RegisterExtensionInfo, RegisterFonts, RegisterMIMEInfo, RegisterProduct, RegisterProgIdInfo, RegisterTypeLibraries, RegisterUser, RemoveDuplicateFiles, RemoveEnvironmentStrings, RemoveExistingProducts, RemoveFiles, RemoveFolders, RemoveIniValues, RemoveODBC, RemoveRegistryValues, RemoveShortcuts, ResolveSource, SelfRegModules, SelfUnregModules, SetARPINSTALLLOCATION, SetAllUsersProfileNT, SetODBCFolders, StartServices, StopServices, UninstallApplicationProcessing, UnpublishComponents, UnpublishFeatures, UnregisterClassInfo, UnregisterComPlus, UnregisterExtensionInfo, UnregisterFonts, UnregisterMIMEInfo, UnregisterProgIdInfo, UnregisterTypeLibraries, UpdateAllUsersPath, UpdateLanguage, UpgradeDatabase, ValidateProductID, WriteEnvironmentStrings, WriteIniValues, WriteRegistryValues, setAllUsersProfile2K, setUserProfileNT
So how to they interact and how do you determine the order? Well... That is not entirely clear. Also it is not always clear which ones run on minor upgrade, major upgrade and uninstall. I mean, don't get me wrong, you can use conditional statements like NOT REMOVE="ALL"
to affect behaviour and you can chain various events to each other in a predefined order but for the vast majority of programmers out there it is way too goddamned complicated to bother wasting their time on!
You have to remember that in 99% of cases you only want the following things from an installer:
You can do all this with InnoSetup (and probably with NullSoft too). In fact you can do all of this a lot easier with those tools than with the Windows Installer. Not only that but you end up with a 30 line config file instead of a 20 000 line (I'm not joking) ISM file (in the case of InstallShield). Also, you don't have to pay the £3000-4000 licence fee for InstallShield Premier. But InnoSetup also has a lot of other significant gains:
My biggest worry with all of this is that I used to think that the Windows Installer ticked some kind of best practice box which would make it a legal requirement for the hardware vendor. But I've read the pre-install requirements for Dell, HP, Sony Vaio, Asus and Toshiba and you can fulfill all of them without Windows Installer.
In summary: Don't use the Windows Installer. Use InnoSetup, or NullSoft. It will be faster, easier, cheaper and you'll end up with a much better installer.
I've just started using Wix - it's been relatively easy to start with. I used the tutorial at Tramontana.co.hu - it's all in english, and pretty thorough, although it did take me a while to make sense of what was going on as this was my first time creating an installer.
One of my initial quams with using Wix was the size of the xml config files, mainly due to dependencies, but I found an awesome tool called Parafin by John Robbins at Wintellect which compiles a list of all the files in a project - basically lets you prebuild your dependent projects / web files and use a single line in the main xml to refer to them. I've just got a batch file that reruns the files on our build server so they're always current (i.e. picks up any new dlls that may have been added).
I've only used the installer in a basic manner, no real user preferences, only major upgrades, but for our internal use, think this is a pretty good option.
The one thing I'm yet to figure out is how to create a Windows scheduled task.