Wix + IIS: создание виртуального каталога на веб-сайте с отключенными привязками для порта 80

У меня установлен Wix, который создает виртуальный каталог в IIS с помощью следующего:

<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>

Однако это не удается, если привязки для порта 80 были удалены для этого веб-сайта.

<iis:WebAddress /> элемент и Port оба атрибута являются обязательными, однако в данном случае они совершенно лишние - мне все равно, что такое порт веб-сайта, если он создает мой виртуальный каталог!

Есть ли способ заставить вышеуказанный установщик успешно создать виртуальный каталог, не запрашивая у пользователя номер порта?

2 ответа

Решение

Я нашел это, пока SiteId атрибут предоставлен, порт фактически игнорируется. Поэтому решение моей проблемы состояло в том, чтобы изменить мой WebSite элемент должен быть:

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

Обратите внимание, что Port атрибут по-прежнему является обязательным (и не может быть 0), однако игнорируется, даже если SiteId атрибут * (имеется в виду, что описание используется для идентификации сайта).

См. Элемент WebSite (документация WiX) для получения дополнительной информации.

Все виртуальные каталоги находятся на веб-сайте. Элемент WebSite можно использовать для создания веб-сайта, если элемент WebSite находится под элементом Component, или, если нет, для поиска веб-сайта. Элемент VirtualDir должен как-то ссылаться на элемент WebSite. Это дизайн IIS, таким образом, WiX моделирует таким образом.

Примечание. Можно утверждать, что элемент WebSite, не входящий в элемент Component, должен был называться "WebSiteSearch" или что-то в этом роде.

Другие вопросы по тегам