0
votes

I have a Wix installed which creates a virtual directory in IIS via the following:

<DirectoryRef Id="INSTALLLOCATION">
  <Component Id="VirtualDirectory" Guid="29BEECCC-AA5F-11DF-BBB1-9C0AE0D72085">
    <iis:WebVirtualDir Id="MyVDir" Directory="INSTALLLOCATION" Alias="MyVDir" WebSite="DefaultWebSite">
      <iis:WebApplication Id="MyApplication" Name="MyVDir" />
    </iis:WebVirtualDir>
    <CreateFolder />
  </Component>
</DirectoryRef>
<iis:WebSite Id="DefaultWebSite" Description="Default Web Site">
  <iis:WebAddress Id="AllUnassigned" Port="80" />
</iis:WebSite>

However this fails if the bindings for port 80 have been removed for that web site.

The <iis:WebAddress /> element and Port attributes are both mandatory, however completely superfluous in this case - I don't care what the Port of the web site is, as long as it creates my virtual directory!

Is there any way of getting the above installer to successfully create a virtual directory without prompting the user for a port number?

2
Why do you think that port doesn't matter if you creates a virtual directory??! Virtual directory - where? On a site. What site? On port xyz - abatishchev
@abatishchev - Why would it matter? Once I've identified that I want to create the virtual directory on site with description "XYZ", can either specify a port that exists for that site, in which case it works (and creates the virtual directory "for all ports"), or I specify one that doesn't exist, and it doesn't work - its essentially a very complicated "Fail while installing" boolean flag. - Justin

2 Answers

1
votes

All virtual directories are rooted in a web site. The WebSite element can be used to create a web site if WebSite element is under Component element or used to find a web site if not. The VirtualDir element must refer to a WebSite element somehow. That's the design of IIS thus the WiX models this way.

Note: One might argue that WebSite element not under a Component element should have been named "WebSiteSearch" or something.

1
votes

I've found that as long as the SiteId attribute is provided the port is in fact ignored. The solution to my problem was to therefore change my WebSite element to be:

<iis:WebSite Id="DefaultWebSite" Description="Default Web Site" SiteId="*">
  <iis:WebAddress Id="AllUnassigned" Port="1" />
</iis:WebSite>

Note that the Port attribute is still required (and cannot be 0), however is ignored even if the SiteId attribute is * (meaning that the description is used to identify the site).

See WebSite Element (WiX documentation) for more information.