Использование WiX для создания виртуального каталога IIS - PullRequest
19 голосов
/ 09 марта 2009

Я бы спросил об этом в списке рассылки WiX, но, похоже, он не работает.

У меня есть приложение, которое является как настольным, так и веб-приложением, которое работает локально. Я создал несколько базовых установщиков WiX, но еще не использовал расширение IIS для создания виртуального каталога под IIS. Я не смог найти простой пример того, как это сделать. Все, что мне нужно сделать, это создать виртуальный каталог, установить его порт и указать ему реальный каталог, который я создаю вместе с остальной частью установщика.

Бонусом будет включение IIS на машине, если она еще не включена, но я предполагаю, что это невозможно, и в любом случае я не нарушаю договор.

Если это имеет значение, этот установщик будет работать только на компьютерах Vista.

Ответы [ 5 ]

21 голосов
/ 01 июля 2010

Поскольку упомянутая Дэвидом статья кажется потерянной, вот пример. Это также создает приложение в виртуальном каталоге.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
    <Product Id="6f2b2358-YOUR-GUID-HERE-aa394e0a73a2" Name="WixProject" Language="1033" Version="1.0.0.0" Manufacturer="WixProject" UpgradeCode="225aa7b2-YOUR-GUID-HERE-110ef084dd72">
        <Package InstallerVersion="200" Compressed="yes" />

        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

        <!-- Reference existing site at port 8080 -->
        <iis:WebSite Id="My.Site" Description="My Site">
            <iis:WebAddress Id="My.Web.Address" Port="8080"/>
        </iis:WebSite>

        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLLOCATION" Name="WixProject">
                    <Component Id="IIS.Component" Guid="{6FAD9EC7-YOUR-GUID-HERE-C8AF5F6F707F}" KeyPath="yes">
                        <iis:WebVirtualDir Id="My.VirtualDir" Alias="foo" Directory="INSTALLLOCATION" WebSite="My.Site">
                            <iis:WebApplication Id="My.Application1" Name="Web Application 1"/> 
                        </iis:WebVirtualDir>
                    </Component>

                </Directory>
            </Directory>
        </Directory>

        <Feature Id="ProductFeature" Title="WixProject" Level="1">
            <ComponentRef Id="IIS.Component" />
        </Feature>
    </Product>
</Wix>
8 голосов
/ 09 марта 2009

Используйте iis:WebVirtualDir и iis:WebApplication из http://schemas.microsoft.com/wix/IIsExtension пространства имен.

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

5 голосов
/ 28 июля 2010

Копание в кеше Google (который, по-моему, теперь очищен Google). Я думаю, что следующий код к отсутствующей записи в блоге Дэвида Поклуда включен в его ответ. Мне пришлось сделать некоторое переформатирование, чтобы получить это в SO, извините, если это уродливо.

<?xml version="1.0" encoding="UTF-8"?>
<!--
IMPORTANT
1. need to add the schema iis.xsd to the property window
2. add the following iis namespace
3. add the Visual Studio reference WixIIsExtenion
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
  <Product Id="7b523f47-YOUR-GUID-HERE-fea6be516471" 
           Name="Vince Wix 3 Web Service" 
           Language="1033" 
           Version="1.0.0.0" 
           Manufacturer="Vince LLC" 
           UpgradeCode="0a8c10df-YOUR-GUID-HERE-50b9ecdb0a41">
    <Package InstallerVersion="200" Compressed="yes" />

    <Media Id="1" Cabinet="WebAppWixProject.cab" EmbedCab="yes" />

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="WebApplicationFolder" Name="MyWebApp">
          <Component Id="ProductComponent" Guid="80b0ee2a-YOUR-GUID-HERE-33a23eb0588e">
            <File Id="Default.aspx" Name="Default.aspx" Source="..\MyWebApp\Default.aspx" DiskId="1" />
            <File Id="Default.aspx.cs" Name="Default.aspx.cs" Source="..\MyWebApp\Default.aspx.cs" DiskId="1"/>
            <iis:WebVirtualDir Id="MyWebApp" Alias="MyWebApp" Directory="WebApplicationFolder" WebSite="DefaultWebSite">
              <iis:WebApplication Id="TestWebApplication" Name="Test" />
            </iis:WebVirtualDir>
          </Component>
        </Directory>
      </Directory>
    </Directory>

    <!--
    IMPORTANT
    Add a virtual directory to an existing web site
    If put it inside the Component, a new Web Site will be created and uninstall will remove it
    -->
    <iis:WebSite Id='DefaultWebSite' Description='Default Web Site' Directory='WebApplicationFolder'>
      <iis:WebAddress Id="AllUnassigned" Port="80" />
    </iis:WebSite>

    <Feature Id="ProductFeature" Title="Vince Wix 3 Web Service" Level="1">
      <ComponentRef Id="ProductComponent" />
    </Feature>
  </Product>
</Wix>

<!--
IMPORTANT
To get rid of light.exe location error, do the following on the Linker Tab:
Set culture to: en-US
Supress Schema Validation in the Advanced Button
-->
2 голосов
/ 09 марта 2009

Я не знаком с WiX, но управлять IIS 6 и 7 можно с помощью объектов WMI (инструментарий управления Windows). Я использовал PowerShell и C # для создания веб-сайтов, виртуальных каталогов, разрешений и т. Д. В IIS. Вы должны быть в состоянии получить эти объекты в большинстве сценариев.

0 голосов
/ 17 июня 2011

Вышеуказанные фрагменты некорректно используют iis: WebAddress. Вам нужно добавить IP = "*", если вы хотите, чтобы это работало со всеми веб-сайтами, которые соответствуют имени и порту. Приведенный выше пример дает сбой во время установки, если в IIS для веб-сайта назначен IP-адрес (wix CA не найдет его вообще)

Rant: wix ужасен по многим причинам, на мой взгляд, и это хороший пример. Если атрибут отсутствует, он будет работать только для веб-сайтов с IP-адресом по умолчанию - насколько это не интуитивно понятно. Wix должен по крайней мере испускать предупреждение для отсутствующего элемента IP. Кроме того, IP-адрес по умолчанию (localhost) представлен как * в метабазе IIS, в то же время в файле wix * означает все веб-сайты (не только *). Так что это действительно сбивает с толку и совсем не интуитивно понятно.

...