Bartek Szafko

all of the bits and pieces

Setting connections strings in .config files with WiX

with 2 comments

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.

Inne podobne artykuły:

Written by Bartłomiej Szafko

Styczeń 1st, 2008 at 5:54 pm

Posted in WiX