Setting connections strings in .config files with WiX
This is usually a common feature request: to be able to modify a connection string in a .config file while installation with wix installer. The most simple thing to do is use a XmlFile( be careful as documentation is from 2.0 version) element.
It’s best to download the most current version of WiX before starting playing around with XmlFile from http://wix.sourceforge.com/releases. Some earlier versions didn’t include variables with error messages.
Now for the wxs file. If you are using Votive project in visual studio, be sure to add reference to WixUtilExtension.dll – it contains routines for xml manipulation among other things. Another important thing is to add namespace declaration: xmlns:util=”http://schemas.microsoft.com/wix/UtilExtension” in the WiX element. Now we can go ahead and use XmlConfig:
1 <?xml version=„1.0„ encoding=„UTF-8„?>
2 <Wix xmlns=„http://schemas.microsoft.com/wix/2006/wi„ xmlns:util=„http://schemas.microsoft.com/wix/UtilExtension„>
3 <Product Id=„152ab043-f24c-4576-8127-a10fbd03faa2„ Name=„PUT-PRODUCT-NAME-HERE„ Language=„1033„ Version=„1.0.0.0„ Manufacturer=„PUT-COMPANY-NAME-HERE„ UpgradeCode=„8c72b0dd-a539-45aa-a2b4-5a4891111acf„>
4 <Package InstallerVersion=„200„ Compressed=„yes„ />
5 <Media Id=„1„ Cabinet=„WixProject1.cab„ EmbedCab=„yes„ />
6 <Property Id=„SQLSERVER„ Value=„(local)„/>
7 <Property Id=„SQLDATABASE„ Value=„Northwind„/>
8 <Property Id=„SQLUSER„ Value=„sa„/>
9 <Property Id=„SQLPASSWORD„/><!–this implies an empty password–>
10 <Directory Id=„TARGETDIR„ Name=„SourceDir„>
11 <Directory Id=„ProgramFilesFolder„>
12 <Directory Id=„INSTALLLOCATION„ Name=„PUT-APPLICATION-DIRECTORY-HERE„>
13 <Component Id=„ProductComponent„ Guid=„7809a7d4-cd0c-4b66-aaff-53f65e9db038„>
14 <File Id=„_F86C7B1F61C44480BEFA68A2D045D7BB„ Name=„consoleapplication1.exe.config„ src=„../ConsoleApplication1/bin/Debug/consoleapplication1.exe.config„ Vital=„yes„ DiskId=„1„/>
15 <util:XmlFile Id=„ModifyServiceLocation„ Action=„setValue„ ElementPath=„/configuration/connectionStrings/add[\[]@name=’cs’[\]]/@connectionString„ File=„[INSTALLLOCATION]\consoleapplication1.exe.config„ Value=„Data Source=[SQLSERVER];Initial Catalog=[SQLDATABASE];User Id=[SQLUSERNAME];Pwd=[SQLPASSWORD]„/>
16 </Component>
17 </Directory>
18 </Directory>
19 </Directory>
20 <Feature Id=„ProductFeature„ Title=„PUT-FEATURE-TITLE-HERE„ Level=„1„>
21 <ComponentRef Id=„ProductComponent„ />
22 </Feature>
23 </Product>
24 </Wix>
ElementPath is a XPath of the element to be modified. Note that this is a formatted field and therefore, square brackets in the XPath must be escaped. Action contains operations to be undertaken in this example I decided only to set value of the connection string so it has to be already declared in .config file. Connection string in this example is defined only based on properties for simplicity sake. Also note that properties USERNAME and PASSWORD are used by the Windows installer engine so be carefull no to overwrite them.