vdproj2wix v1.0

Introduction

This PowerShell script (vdproj2wix.ps1) is a very simple one for converting a Visual Studio setup project (aka a .vdproj file) into a WiX format one (i.e. a .wxs file). Although there are other more fully featured tools for creating a .wxs file, such as from an existing MSI binary, I wanted something that gave me a bare bones .wxs file that ignored all the boilerplate code that Visual Studio adds by default. As a server-side chappy all the MSI installers I create are simple ones designed to deploy a bunch of files into a folder - this script targets that scenario.

Converting a Setup Project

The script requires just a single argument to run - the path to the .vdproj file that you want to convert. It will create a new file in the same folder with the same name but with a .wxs extension instead, e.g.

C:\> PowerShell -File vdproj2wix.ps1 Path\To\MyProject.vdproj
Input : Path\To\MyProject.vdproj
Output: Path\To\MyProject.wxs

This should produce a simple .wxs file that looks something like the following:-

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="ABCDEFGH-ABCD-ABCD-ABCD-ABCDEFGHIJKL"
             Name="vdproj2wix Test"
             Language="1033"
             Version="1.0.0"
             Manufacturer="Chris Oldwood"
             UpgradeCode="ABCDEFGH-ABCD-ABCD-ABCD-ABCDEFGHIJKL">

        <Package Compressed="yes"/>

        <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/>

        <Directory Name="SourceDir" Id="TARGETDIR">
            <Directory Name="ProgramFilesFolder" Id="ProgramFilesFolder">
                <Directory Name="Chris Oldwood" Id="_1">
                    <Directory Name="vdproj2wix Test" Id="_2">
                        <Component Id="_1" Guid="F27BD5C5-A65D-4608-96D4-7C5DA1F76302">
                            <File Source="Example File.txt"/>
                            <File Source="SubFolder\Another File.html" Name="Manual.html"/>
                        </Component>
                    </Directory>
                </Directory>
            </Directory>
        </Directory>

        <Feature Id="_1" Level="1">
            <ComponentRef Id="_1"/>
        </Feature>

    </Product>
</Wix>

NB: The WiX manual strongly advises you to put each file into a separate component to make servicing easier. While that may be the best approach for long-term maintenance I wanted the simplest .wxs file possible from the conversion. This is highlighted by the generation of "_N" style Id's where necessary.

Limitations

As should be clear from the Introduction and example above this script is not intended to provide a hi-fidelity conversion, on the contrary it produces a basic .wxs file with entries for the following:-

Hence this means no UI stuff or any other fancy MSI features.


License & Warranty

This script is freeware - you get what you pay for, nothing more, nothing less.

Contact Details

Please check the web site for updates.

Email: gort@cix.co.uk
Web: www.cix.co.uk/~gort

Chris Oldwood
31st October 2011