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" или что-то в этом роде.