使用WiX创建IIS虚拟目录

时间:2009-03-09 03:27:32

标签: windows iis iis-7 installer wix

我会在WiX邮件列表上问这个问题,但似乎已经失败了。

我有一个应用程序,它既是桌面应用程序,也是在本地运行的Web应用程序。我已经创建了几个基本的WiX安装程序,但尚未使用IIS扩展在IIS下创建虚拟目录。我还没有找到一个如何做到这一点的简单例子。我需要做的就是创建虚拟目录,设置其端口,并将其指向我正在使用其余安装程序创建的真实目录。

奖励是在机器上启用IIS,如果它尚未启用,但我猜这是不可能的,并且对我来说不是一个破坏者。

如果重要,此安装程序将仅在Vista计算机上运行。

5 个答案:

答案 0 :(得分:21)

由于David提到的文章似乎丢失了,这里有一个例子。这也会在虚拟目录中创建一个应用程序。

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

答案 1 :(得分:8)

使用iis:WebVirtualDir命名空间中的iis:WebApplicationhttp://schemas.microsoft.com/wix/IIsExtension

我之前有过类似的问题,我发现以下文章非常有用:Wix 3.0 Creating IIS Virtual Directory

答案 2 :(得分:5)

挖掘Google缓存(我认为现在已被Google清除)我认为以下是他的答案中包含的缺少博客条目David Pokluda的代码。我不得不做一些重新格式化以将其变成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
-->

答案 3 :(得分:2)

我不熟悉WiX,但可以使用WMI(Windows Management Instrumentation)对象管理IIS 6和7。我已经使用PowerShell和C#在IIS上创建网站,虚拟目录,权限等。您应该能够从大多数脚本环境中获取这些对象。

答案 4 :(得分:0)

以上代码段以不正确的方式使用iis:WebAddress。如果您希望这与所有与名称和端口匹配的网站一起使用,则需要添加IP =“*”。如果在IIS中为网站分配了IP地址,则上述示例在安装期间失败(wix CA通常不会找到它)

Rant:wix因为很多原因很糟糕,在我看来,这是一个很好的例子。如果缺少该属性,它将仅适用于具有默认IP的网站 - 这是多么不直观。 Wix至少应该为缺少的IP元素发出警告。此外,默认IP(localhost)在IIS配置数据库中表示为*,同时在wix文件中*表示所有网站(不仅仅是*)。所以它真的很混乱,而且根本不直观。