I have been working over the past month to create a reusable installer using the Windows XML Installer for .Net (known as WiX). It is amazingly easy to create installer packages using WiX and it supports scripting and execution from the command-line and also from a customized GUI interface. The XML schema is well documented and there are lots fo great examples around the web. With WIX, you can package any number of .Net components together as a single installer .msi package. There is an additional plug-in for WIX called "Votive" which is a template plug-in for Visual Studio 2005/2008 and offers intellisense for the Wix schema. During the past month, I have been working to build a wix installer for a reusable website template. There is a learning curve with Wix simply because of the sheer amount of customization that it possible.
A typical Wix file will follow the following format:
[code]
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" Name="MyProject" Language="1033"
Version="1.0.0.0" Manufacturer="LilOlMe" UpgradeCode="870cb736-3388-4ad6-a47c-e6caf84844ba">
<Package InstallerVersion="200" Compressed="yes"
Keywords="MyProject, LilOlMe, More stuff here" />
...
</Product>
</Wix>
[/code]
Inside the project, you can add various components, and "actions" that are to be performed during the application set-up process. Wix has been used by Microsoft to create the installers for MS Sql Server 2005, Office 2007, etc. One of the issues with Wix, so far, is that it is designed to create a single installer on a given machine. I am trying to find a way to be able to use Wix to be able to mimic the MS Sql Server 2005 "instance" set-up. If you have ever installed Sql 2005, you will be familiar that the installer allows you to use a "default instance" or create additional custom instances of Sql Server 2005 running on a single machine. I'm presently stuck trying to create a way to mimic this with web applications.
The reason for the multi-instance need is so I can repackage and redeploy a product to multiple clients without having to build an installer for each client. Wix itself does not include support for this functionality, but Ive heard that it does support inheritance, extension and customization, so there is a glimmer of hope.
Since Wix provides a "packaging" structure for practically any kind of .Net project, and since I typically use .Net and Sql Server 2005 for my business layer, and db tier, I'm thinking that it would be an ideal way to create an entire project with Flex. Since Flex compiles into a file (.swf) from the Wix perspective, it is basically just a component. And as such, could be packaged into the installer. I need to test this theory and once I do, and verify that it works, I will post about it.
Anyway, just wanted to touch on the topic and if anyone has any ideas on a solution to my dilemma, please let me know.