Click here to Skip to main content
Click here to Skip to main content

A WIX web setup

, 9 May 2007
Rate this:
Please Sign up or sign in to vote.
Create WIX web setup using VS2005 and Wix 3.0

Introduction

Create a web setup in Visual studio 2005 using WIX 3.0. This also generates wix file automatically. The setup has the following features:

  • Install based on the environment
  • Create event source
  • Create virtual directory
  • Select web sites, application pool
  • Edit config file

Background

Based on a requirement in our project, I had to implement WIX setup projects. I was new into deployment and tried hard getting the project up and running. Well I should say thanks for the tutorial at: http://www.tramontana.co.hu/wix/ . Going further ahead in this article, I have created a kind of solution template which can be used to create a web setup in Visual Studio 2005. It has been built using .NET 2.0, Wix 3 (also votive for VS2005 integration).

Using the code

* What does this do?
Well, create web setup with some basic custom actions...

* What does it have?
It has the following features:
* Create web setup from wix script.
* ComponentWriter, writes the list of files to be added in setup, upgrades version no.
* Web Depolyment project precompiles the web project.
* CustomInstaller helps in creating event source, virtual directory, edit config file (you can also do it in WDPs).

* How to use?
Well, in the Web Deployment project, (right-click "Open project file...") just add the following code:
<!-- My customization -->
  <UsingTask AssemblyFile="..\SolutionItems\Djans.ComponentWriter.exe" TaskName="ComponentWriterTask" />
  
  <PropertyGroup>
    <SourceDirectory>$(OutputPath)</SourceDirectory>
  </PropertyGroup>
  
  <ItemGroup>
    <CustomInstallerFiles 
     Include="..\SolutionItems\Djans.CustomInstaller.dll;..\SolutionItems\Djans.CustomInstaller.dll.config"    
    />
    <EnvironmentFiles Include="..\SolutionItems\*.xml" />
  </ItemGroup>

  <ItemGroup>
    <FilesToBeDeleted Include="$(SourceDirectory)\bin\*.pdb;$(SourceDirectory)\*.csproj*" />
  </ItemGroup>

  <Target Name="AfterBuild">
    <Message Text="**************** After Build **********************" />

    <CallTarget Targets="DeleteUnwantedFiles" />
    <CallTarget Targets="CopyInstallerFiles" />
    <CallTarget Targets="CopyEnvironmentFiles" />
    <CallTarget Targets="WriteWix" />
  </Target>

  <Target Name="DeleteUnwantedFiles">
    <Message Text="Deleting unwanted Files ..." />
    <Delete  Files="@(FilesToBeDeleted)" TreatErrorsAsWarnings="true" />
    <RemoveDir Directories="$(SourceDirectory)\obj" />
  </Target>

  <Target Name="CopyInstallerFiles">
    <Message Text="Copying Installer Files ..." />
    <Copy SourceFiles="@(CustomInstallerFiles)" 
          DestinationFiles="@(CustomInstallerFiles->'$(SourceDirectory)\bin\%(Filename)%(Extension)')" />
  </Target>

  <Target Name="CopyEnvironmentFiles">
    <Message Text="Copying Environment Files ..." />
    <Copy SourceFiles="@(EnvironmentFiles)" 
          DestinationFiles="@(EnvironmentFiles->'$(SourceDirectory)\bin\%(Filename)%(Extension)')" />
  </Target>

  <Target Name="WriteWix">
    <Message Text="Writing wix files ..." />
    <ComponentWriterTask 
         SourceDirectory="$(SourceDirectory)" 
         OutputFile="..\WixSetup\Components.wxs" 
         UpgradeFile="..\WixSetup\WixSetup.wxs" 
    /> 
  </Target>
<!-- done --> 

From the target="WriteWix", the componentwriter task is called. It takes three arguments the location of source directory, the wix file which lists all the files to be deployed and the main wix file which has the Product element.

The ComponentWriter lists all the files from the release directory and writes the wix components file. Next it updates the version code in the Wix setup file (main). The ComponenWriter can be either separately called from command prompt or can be used as a task in msbuild script. The current WIX version does not automatically list the files needed for deployment. Hence I wrote a simple C# program to do the job, which will be launched before the WIX setup project is compiled. In the msbuild script, which in the sample is a part of the Web Deployment project, it is written as :

<Target Name="WriteWix">
    <Message Text="Writing wix files ..." />
    <ComponentWriterTask 
         SourceDirectory="$(SourceDirectory)" 
         OutputFile="..\WixSetup\Components.wxs" 
         UpgradeFile="..\WixSetup\WixSetup.wxs" 
    /> 
  </Target>

The ComponentWriter task takes three arguments:

  1. SourceDirectory: the complete physical path of the directory where source files are stored. The source files are those files which will be used for deployment.
  2. OutputFile: The wix file which lists out the directory structure, the files to be deployed and the feature element. In the sample it is named "Component.wxs".
  3. UpgradeFile: This is the main file which calls other wix files like UserInterface.wxs, Actions.wxs, Component.wxs etc. It also holds the Product, Upgrade elements. In the sample it is WixSetup.wxs.
  • Note: [UgradeFile] updates only first 3 parts, the 4th part is always 0 in the 4 part versioning. if you do not want to use upgrade provide '-skip'.

Screenshot - WixWebSetup.jpg


Files in WixSetup Project:

  • Component.wxs: This file lists all the files that are to be deployed.
  • WixSetup.wxs: This is the main file, has the product element, version details
  • Actions.wxs: the custom actions are defined in this file.
  • UserInterface.wxs: This defines the UI components for the setup.
  • Properties.wxs: This file holds all the property definitions of the setup
After compiling the Web deployment project, compile the Wix project, yo!, the setup is ready!

ComponentWriter from command prompt

Switches: '?', '/?', '-?', 'help' diplays this help.
'-skip' skips updating the upgrade code.

Usage:
ComponentWriter.exe [SourceDirectory] [OutputFile] [UgradeFile]

[SourceDirectory]: (Mandatory) The complete physical path of the directory where source files are stored.
The source files are those files which will be used for deployment.
[OutputFile]: (Mandatory) The wix file which lists out the directory structure, the files to be deployed and the feature element.
[UgradeFile]: (Optional) The wix file which has the upgrade element.
To skip using upgrade, instead of the file name, provide '-skip' as the argument.

Example:
Write component file and upgrade the version:

    Djans.ComponentWriter.exe c:\Project\Source c:\Project\WixSetup\Component.wxs c:\Project\WixSetup\WixMain.wxs
Write component file and do not upgrade the version:
    Djans.ComponentWriter.exe c:\Project\Source c:\Project\WixSetup\Component.wxs -skip

Note: [UgradeFile] updates only first 3 parts, the 4th part is always 0 in the 4 part versioning.

Points of Interest

  • Automate wix setup in Visual Studio 2005

History

--.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

JannuD
Architect
India India
No Biography provided

Comments and Discussions

 
GeneralFragmentRef removed from schema Pinmembersi61829-Aug-07 21:43 
GeneralRe: FragmentRef removed from schema Pinmembersi61829-Aug-07 21:51 
GeneralRe: FragmentRef removed from schema Pinmembersi61829-Aug-07 22:06 
GeneralRe: FragmentRef removed from schema PinmemberJannuD30-Aug-07 2:48 
GeneralRe: FragmentRef removed from schema [modified] Pinmembersi61830-Aug-07 15:00 
No worries.
 
I was also wondering if it's worth separating out the console application from the msbuild task, and then submitting the msbuild task to msbuildtasks ?
 
The only question I'd have is what the Wix people are themselves doing to enhance the MSBuild tasks?
(no point going external if it's planned internal). I'll spend some time having a
look through their mailing list.
 
-- modified at 20:27 Thursday 30th August, 2007
BugRe: FragmentRef removed from schema Pinmemberdbirdz5-Jun-12 23:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.141220.1 | Last Updated 10 May 2007
Article Copyright 2007 by JannuD
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid