Automating Web Deployment using Windows Installer XML (WIX)

Deployment of web sites is usually done by copying the compiled ASP.NET web site files into the target virtual directory by using Copy Web Site or Publish web site features in Visual Studio and by manually creating and configuring the Web Site in IIS.

Though this method is simple, it involves lot of manual effort in verifying the Pre Requisites, Creating/Modifying or Configuring the Web sites in IIS. We can automate this whole process by building a simple Windows Installer Package using WIX in the Visual Studio itself while working on the development of your site.

The installer using WIX can

· Check for all the Pre Requisites (OS Version, IIS version, and .NET Framework etc..) before applying any changes

· Create/Modify the web site, Application Pool and configures it in IIS

· Provide the features like Install, Un-Install, Repair and change to the site

· Remove everything that is created (Web Site, Physical Directories) on Un Install and leaves the target server in clean state with just few button clicks

· Rollback all the changes in case of failure

Create a Sample Web Site:

Let’s create a simple website and add a Web Deployment Project to the Web Site. We will build the installer package to deploy this web site on to the target server.

Fig 1: Sample web site and its Web Deployment project

Right click on Web Deployment project and open the Property pages to set up the output location for our compiled web site files. Leave the default value which is set to project output folder. This location we will be the source for our installer package to pick up the required files while building the installer package.

Fig 2: Web Deployment Project property pages

Fig 3: Files in Web Deployment project output folder

Authoring Installer for our Sample Web Site:

We need to install the WIX 3.0 version from http://sourceforge.net/projects/wix/files/ to add the WIX plug-in to the Visual Studio. (Please use WIX documentation for basic understanding on Directory, Component and Feature elements in WIX source files)

Now add the new WIX project to our solution. After you add it the solution looks like this

Fig 4: The web site and the set up project together in one solution

The Product.wxs is the WIX Source File which we will modify shortly to define our package components. Before that we need to add reference to WixIISExtension.dll and WixUtilExtension.dll to our WIX Project. Now open the Product.wxs and add the following xml namespaces to get the intelliscenece for WIX IIS and other elements.

The default directory structure defined in WIX source file maps to “C:Program FilesApplicationName” which specifies the target install location for our package i.e. the location on target server which will have all the output files from our MyWebSite_deploy project (See Fig 3).

Now add the following under the INSTALLLOCATION directory to define our first component

The component MySite_root_Files defines all the files that are directly needs to be copied under the INSTALLLOCATION. The element specifies the actual file that needs to be copied and the source attribute specifies the complete source path of the file.

Source=”$(var.SolutionDir)MyWebSite_deploy$(var.Configuration)Default.aspx”

$(var.SolutionDir) is a WIX pre-processor which gives the Solution folder path to the WIX compiler

$(var.Configuration) is another pre-processor which specifies the Active Configuration of the solution (i.e. Debug | Release)

Along with the files Default.aspx and Web.Config we also have bin folder in project output directory which needs to be created under the install location. So create the folder mapping INSTALLLOCATIONbin by adding the directory element like below under the INSTALLLOCATION directory. And define the component and file or Directory element for each of the files and directories under the bin folder as we have done for INSTALLLOCATION directory.

The same way we can add any number of directories and files mapping from source to the target location.

Setting up IIS web site:

So far we have seen how to move files from source to the target location by using the Directory, File and Component elements. But how can we configure IIS?

WIX has an API or an Extension (WIXIISExtension.dll) to interact with IIS. Remember that we have already added reference to this to our WIX Project. Add another component under the INSTALLLOCATION directory to define the configuration to create a web site in IIS.

Most of the elements and their attributes in this component are self descriptive.

define the domain user which can be referenced anywhere in the source file using the Id MyWebSite_AppPoolUser.

creates the application pool with the name MyWebSiteApplication. The attribute Identity = “Other” specifies that this application pool uses Custom account for identity. And the user attribute specifies the ID of the domainusername created anywhere in the source file using

and its child elements , and define the complete web site in IIS. The Directory attribute of Web Site element is set to INSTALLLOCATION i.e. C:Program FilesMyWebSite which is our target location to copy the compiled ASP.NET files to run our Web Site.

The bindings IP, PORT and Host Header for our web site are specified by element, and the mapping between the application pool MyWebSite_AppPool and the site is defined by . The Default Dcoument and the Authentication are specified by .

So we have defined all the components (MySite_root_Files, MySite_bin_Directory, and MyWebSite_IISConfigure) that need to be installed on to the target server by our installer. But we know that every installer needs at least one feature which is a set of components that define one complete install feature i.e. our Web Site in this case. We have to define it using the feature element.

That is it. We have completed authoring the installer package for our Web Site. Upon building the entire solution again our Set up project reads the compiled ASP.NET files from our Web Deployment Project out put folder and embeds them into a Windows Installer package which is created in the out put directory of our setup project.

Fig 5: Installer package in Setup project output location

We just need to copy this installer package to the target server and double click and wait for the job to be done.

Fig 6: while installing our setup file

Once the install is complete, open the IIS Manager to see that our web site running.

Summary:

The web deployment using WIX is simple, flexible, and gives a overall great web deployment experience.

Hope this gives you a start-up point

WIX: Update Application Configuration Files during Installation

Often we need to modify application configuration files during installation of the application. Generally to set some application settings, or modify database connection strings etc. We can do this in WIX by using the <util:XmlFile/> custom actions. To use these custom actions we need to reference WIXUtilExtension to the setup project. <util:XmlFile Id="UpdateConnectionString" File="[#FileID]" ElementPath="XPATH"… Continue reading WIX: Update Application Configuration Files during Installation