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.