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.
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.
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.
This script is freeware - you get what you pay for, nothing more, nothing less.
Please check the web site for updates.
Email: gort@cix.co.uk
Web: www.cix.co.uk/~gort
Chris Oldwood
31st October 2011