views:

92

answers:

4

We are working on deploying a very custom application.

The application is the main program (and only program) that will run on the PC, but it depends on multiple 3rd party installers that must be installed via separate setup programs. Some of these are standard MSI, install shield, other outdated setups, etc.

On top of that we must deploy SQL Server Express 2005, install IIS if it is not found and setup a website.

Our final end user deploying this will be a person with technical experience on a new "out of the box" PC with XP SP3.

What is a good option for developing this? WiX? Visual Studio setup projects may not cut it. There is also the issue of somehow running other MSI's while an MSI is already running.

Would it function better as a standard C# application that requires .Net to be preinstalled? Then it would merely prompt for a few options then run several installers I suppose.

Any thoughts? We'd prefer to stick to C# .Net.

+3  A: 

Doesn't XP SP3 already have a .NET runtime installed?

If your end user is someone with technical experience then it seems reasonable to sacrifice some of the "wizardness" of an MSI package for the flexibility of something a little more raw, such as a Ruby script, Powershell script, or .NET console or Winforms app.

Seth Petry-Johnson
We can probably assume .Net is preinstalled. We'll probably go with a C#-written application that runs multiple installs based on options supplied to the user. Using shell scripting is something I feel we can do more elegantly in C#.
Jonathan.Peppers
+1  A: 

This comes down to the benefit vs. cost.

If this is only to be run on a single or small number of target PCs and you have the ability to support the install (even remotely), I would recommend going to a manual install for any 3rd party dependencies.

It will be much easier to provide each package's installer with written instructions and provide than to write/test/debug (and probably still support) a complex, fully automated installer that will only be used once or thrice.

If there will be many installations, the automation will give more benefit.

mbmcavoy
+1  A: 

There is an installer product called Inno Setup that might suit your needs. It allows for custom scripting so you can detect whether all of the dependencies are installed.

If some of them are not installed then with some scripting the installer can download and install the 3rd party dependencies before installing your app. Some help with that can be found at the Code Project article. (http://www.codeproject.com/KB/install/dotnetfx_innosetup_instal.aspx)

The only problem with this route is the scripting language is in pascal.

Just a question, is the company you work for supplying the boxes because if you are then couldn't you pre-install the software? At least that way there is one less thing that can go wrong.

Zerodestiny
+1  A: 

WIX is a fairly flexible way to create the installer (although the learning curve can be quite a bit as the documentation still is lacking). That would probably be your best bet for installing the components that are actually your product's artifacts. Have it check that the required components are installed, but I wouldn't try to launch installers off of it. Instead, like Seth mentioned, write a Powershell script/VBScript (or Console application) that will do the component checking and launch the old installers for user in the order necessary. Of course you would need a way to capture when the installer finishes before continuing on (don't know if VBScript really has that capability, so Powershell/Console app may be a wise choice). And the final installer called would be your product. This way if there's reboots required the installer can be ran the exact same way and would just keep checking for required components and firing off installers as needed.

Agent_9191