tags:

views:

1663

answers:

21
  • Installshield
  • Visual Studio
  • NSIS
  • other ...

Why?

Advantages?

Disadvantages?

+6  A: 

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.

0xA3
Have began to use Wix myself and besides the appalling documentation i think it's brilliant.
Conrad
+1 WiX. Documentation isn't great, but it creates great installers
Adam Tegen
+12  A: 

I love NSIS -

  • it's not as absurdly complicated as InstallShield,
  • it's easier to version control as it's text-based, not binary.
  • Writing plugins is done in C so you can write very powerful ones (I extended our encryption library with an NSIS interface quite easily, for example).
  • I find the tutorials and support better for NSIS.
  • I've had InstallShield break, for no clear reason, and had to re-build the project from scratch, because something had gone wrong somewhere. NSIS is just a simple compiler, so it doesn't break randomly.
  • It has a huge number of really useful plugins, for rollback, forms, programming logic, and anything else you're likely to want.

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.

RB
I live by NSIS too :)
leppie
+1  A: 

After trying several, including Visual Studio, Wise for Windows Installer, and Tarma (now gone bust) - we settled for Advanced Installer

Advantages are:

  • Simple user interface for building your installer
  • Flexible
  • Very active at releasing new versions with useful features
  • Responsive technical support
  • Free version for basic install packages

Disadvantages

  • To get advanced features (custom UIs, merge module support etc) it can get a bit expensive, although worth it in my opinion (we have enterprise licenses)

Definitely worth investigating to see if it meets your requirements

John Sibly
Tarma gone bust? Is this a different company: http://www.tarma.com (actual question; I'm not too familiar with the variety of Installer companies and is actually doing some research of a suitable product)
Darkwoof
The same company yes. We brought licenses, but they said that they would no longer be developing the product or providing updates so we got our money back. Shame, as it seemed pretty good. They seem to be still selling Tarma though, so perhaps they found some additional funding to keep going. I'd still recommend Advanced installer however.
John Sibly
I see, I see. I tried out their trial version couple of days ago (Tarma), went rather well for most parts but I encountered some usability issues. For Advanced Installer I posted on their forums but found that I might not be able to get things done exactly the way I wanted, so I should be still looking around. Anyway, thanks for the info!
Darkwoof
Just wanted to add that I wrote in to Tarma and clarified some of the issues I was having. Will thus be evaluating them amongst the rest a little more.
Darkwoof
+15  A: 

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)

  • Support for all versions of Windows in use today: Vista, XP, 2008, 2003, 2000, Me, 98, 95, and NT 4.0. (No service packs are required.)
  • Extensive support for installation of 64-bit applications on the 64-bit editions of Windows. Both the x64 and Itanium architectures are supported. (On the Itanium architecture, Service Pack 1 or later is required on Windows Server 2003 to install in 64-bit mode.)
  • Supports creation of a single EXE to install your program for easy online distribution. Disk spanning is also supported.
  • Standard Windows 2000/XP-style wizard interface.
  • Customizable setup types, e.g. Full, Minimal, Custom.
  • Complete uninstall capabilities.
  • Installation of files: Includes integrated support for "deflate", bzip2, and 7-Zip LZMA file compression. The installer has the ability to compare file version info, replace in-use files, use shared file counting, register DLL/OCX's and type libraries, and install fonts.
  • Creation of shortcuts anywhere, including in the Start Menu and on the desktop.
  • Creation of registry and .INI entries.
  • Integrated Pascal scripting engine.
  • Support for multilingual installs.
  • Support for passworded and encrypted installs.
  • Silent install and uninstall.
  • Full source code is available (Borland Delphi 2.0-5.0).

(My) Pros:

  • Simple Scripting
  • Simple Installer generation via "addon" ISTool
  • Small Files
  • It just works :)
  • Many USEFUL commandline parameters available for the installer

(My) Cons:

  • Obviously Microsoft is not so much into supporting other installers, so having it install standard runtime libraries is a bit more work: You've got to find runtime distributables MANUALLY, add them to the installer and execute them.
BlaM
I've used InnoSetup for years. It's the best installer I've ever used, bar none.
The Wicked Flea
It sounds really good, however, as we distribute application for windows and want to be "Windows logo" compliant, our installer shall be based on MSI ...
Nicolas
Another con: InnoSetup doesn't support Unicode for translation files.
Jon Tackabury
A: 

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.

tomo
Scripting in Inno Setup is done in a Pascal dialect, using the embedded RemObjects Pascal Scripting engine.
mghie
+2  A: 

+1 InnoSetup, amazing and simple

Cesar Romero
You know, you can say "+1" by clicking on the upvote button; no need to post a separate "+1"
Brian Campbell
A: 

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).

ClickOnce desavantages

  • Require to have IIS somewhere for the first install.
  • Cannot install to Program Files.

ClickOnce advantages

  • Fastest installer available, 1 button to click (Publish) and it's available to everyone.
  • Update is transparent for user.


Visual Studio desavantages

  • Limited functionnality
  • Limited setup option/customization

Visual Studion advantages

  • Came with VS and pretty fast to build something
  • It works out of the box
Daok
You really need to spell check this post! ;P
leppie
Click edit and do it. Does not seem so bad :P but like I already said, english is far from my first language so :P
Daok
A: 

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.

robsoft
A: 

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.

Omar Kooheji
A: 

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.

billcoke
The problem with InstallAnywhere is that it's outrageously expensive!
Kaitsu
Try http://installbuilder.bitrock.com for a much more reasonable alternative, we get a lot of InstallAnywhere refugees as customers :)
Daniel Lopez
+3  A: 

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"

Bernd Ott
Microsoft relaxed the rules to allow other installation technologies; however I wouldn't really want to try without a Windows Installer based installer since the rules are still heavily stacked in favor of Windows Installer.
Rob Hunter
+2  A: 

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

  • MSI output
  • Nice GUI for creating dialogs
  • Premier version gives you additional languages (cuts down on localization time)
  • Command line support

Disadvantages

  • GUI is a resource hog.
  • Expensive.
  • Additional costs for access to support (per incident, or maintenance contract)

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.

sascha
Off topic, do you use one InstallShield project for building the 20 English variations and German variations? Do you use Release Flags to control what gets built in to the install or do you just use conditions at install time?
Jamie
I LOVE InstallShield. The big thing is, you need to learn Windows Installer (MSI) technology. Once you understand it fully, you can unlock the power of InstallShield.
Mick
@Jamie - using one project per language at the moment. I use a combination of release flags and install conditions for variations on the English installer (and soon the other languages).
sascha
A: 

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.

YodaJStarWars
A: 

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

Daniel Lopez
A: 

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.

+4  A: 

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.

Duncan Edwards
+1  A: 

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).

Alek Davis
A: 

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:

  • Installshield's scripting language, Installscript, allows you to write arbitrarily complex installers with some pretty complex flows and heavy lifting configuration, even for MSI installers via Installscript-MSI.
  • It's been around forever, and there is a very strong community around it, so very likely if you're trying to do something it's either been done or attempted before, and someone's written about it.
  • It can product the time honored Installshield setup.exe standard or (as previously mentioned) MSI packages.

Cons:

  • As previously mentioned, the documentation ranges from lackluster/mediocre to positively abhorrent. Often trial and error is the only way to figure out of function X will work with parameter Y, and that's no way to run a ship. The Windows Installer integration functions are in particularly bad shape documentation wise, and since the Installscript-MSI project type is on the newer side, less has been written about it by the community as well.
  • Acresso's licensing system is err... Rather heavy weight and punishes organizations with a dynamic environment. I hesitate to be too harsh here because I realize that piracy is a problem, but in the end analysis I feel like punishing your users is not the solution.
  • The Installscript language can be somewhat of a shock for programmers used to languages with more structure and abstraction available. Think Atari BASIC, but with labels rather than line numbers, and where the only data structures you're allowed to manipulate directly are numbers and strings. The rest must be implemented using a suite of list manipulation methods - it's like working with data structures using salad tongs :(
  • The Installshield developer UI can be extremely intimidating. There are about a million different panes and views where settings can hide, so when something goes wrong it can be a positively head bashing task to figure out where it lives.
  • Complex flow of control can get very tricky. Labels can't be passed to functions, so you're stuck with gigantic case statements to dispatch to the correct location.

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.

feoh
A: 

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.

Joshua
Half the time I agree, the other half I don't. I do wish Microsoft had the foresight to handle application files and data files differently with Windows installer. Life would be a whole lot simpler.
Rob Hunter
@Rob my cases were usually weird binary formats that really were not supposed to be changed by the end user.
Joshua
+2  A: 

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:

  • Installshield
  • InstallAware
  • Wix
  • many, many others

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:

  • Copy some files to the %ProgramFilesx86% directory
  • Copy some config files to the %ProgramData% directory
  • have the program appear in "Programs and Features"
  • Allow the user to uninstall the program from "Programs and Features"
  • Create shortcuts on the desktop and start menu
  • Handle upgrading with minimal configuration
  • Allow compression of install files into a single EXE
  • Handle pre-requisites
  • Provide UI install and also silent install and allow this to be configurable
  • Support multiple languages

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:

  • IDE loading time is about 2 seconds (as opposed to InstallShield which is 20 seconds). In fact sometimes when you run the InstallShield IDE you can see the lights in the office flicker
  • Compile time is under 5 seconds (as opposed to Installshield which is at least 30 seconds)
  • The install time for a simple App (5 files) is under 1 second. Yep. That's right. Pretty much the time it takes to copy 5 files and write one registry key. Which is how it should be. A Windows Installer installation will always take at least 15 seconds. I have no idea what it is doing in this time.
  • Adding an extra file is literally effortless. Whereas often with the Windows Installer you have to add a component and a lot of the time manually faff around with the massive config file

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.

Duncan Edwards
It makes perfect sense and is well documented, however you are very much correct in saying that it's not well understood by most developers. If you're developing software for Enterprise deployment and get paid for the 6 months (at least) it takes you to learn the technology you can quite easily understand it. It's just not worth the time for your average developer :)
sascha
A: 

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.

Sam J