views:

41

answers:

1

I'm creating a web application installer using WiX. I want to allow the user to select the web site from a list of sites on the IIS server, and then install the app in a sub-directory of that web site's root folder.

I've finished the "select web site" portion. I have a custom action that sets a bunch of properties based on the selected site. One of those properties (WEB_SITE_ROOT_PHYSICAL_PATH) is the path to the web site's root folder.

However, I can't get the application to install to that path.

My directory structure is as follows:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="IIS_WEB_ROOT">
    <Directory Id="WEB_SITE_ROOT" Name=".">
      <Directory Id="INSTALLLOCATION" Name="$(var.ProductName)">

IIS_WEB_ROOT is defined as:

<Property Id="IIS_WEB_ROOT">
  <RegistrySearch Id="Search" Root="HKLM" Key="Software\Microsoft\InetStp" Name="PathWWWRoot" Type="raw" />
</Property>

WEB_SITE_ROOT_PHYSICAL_PATH is set to WEB_SITE_ROOT, as follows:

<Property Id="WEB_SITE_ROOT_PHYSICAL_PATH" Value="WEB_SITE_ROOT"/>

The web site selection dialog is displayed before the installation folder dialog. The installation folder dialog uses the following "standard property":

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION"/>

The upshot of all this is that the application is installed into the IIS web root folder - not the web site root folder.

I'm just not sure how to get my installation folder to be set to my dynamically defined WEB_SITE_ROOT_PHYSICAL_PATH property. I need some pointers in the right direction. Do I need another custom action to set the installation folder after the WEB_SITE_ROOT_PHYSICAL_PATH property is set? If so, how do I set this to first after the web site selection dialog completes? Or, have I get all the pieces, but I just haven't wired them up correctly.

A: 

In order to set the property to the value of another property, you should author a custom action:

<CustomAction Property="WEB_SITE_ROOT_PHYSICAL_PATH" Value="[WEB_SITE_ROOT]" />

Of course, you should schedule this action after the original WEB_SITE_ROOT property is defined.

Hope this helps.

Yan Sklyarenko
Won't that set WEB_SITE_ROOT_PHYSICAL_PATH = WEB_SITE_ROOT? I need the reverse. And, if I switch them, WiX tells me I need to run the action prior to CostFinalize, as WEB_SITE_ROOT is a directory. However, I need to wait until after user selects the web site in the custom dialog.
dommer
Ah, then you probably should rewrite it like this (notice 'Directory' instead of 'Property'):
Yan Sklyarenko
<CustomAction Directory="WEB_SITE_ROOT" Value="[WEB_SITE_ROOT_PHYSICAL_PATH]" />
Yan Sklyarenko

related questions