【问题标题】:Wix + IIS : Creating a virtual directory on a web site with bindings for port 80 disabledWix + IIS:在禁用端口 80 绑定的网站上创建虚拟目录
【发布时间】:2010-08-18 00:27:48
【问题描述】:

我安装了一个 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 端口绑定已被删除,则会失败。

&lt;iis:WebAddress /&gt; 元素和Port 属性都是强制性的,但在这种情况下完全是多余的——我不在乎网站的端口是什么,只要它创建了我的虚拟目录!

有没有什么方法可以让上述安装程序成功创建虚拟目录而不提示用户输入端口号?

【问题讨论】:

  • 如果你创建一个虚拟目录,为什么你认为那个端口无关紧要??!虚拟目录 - 在哪里?在一个网站上。什么网站?在端口 xyz
  • @abatishchev - 为什么很重要?一旦我确定要在站点上创建描述为“XYZ”的虚拟目录,可以指定该站点存在的端口,在这种情况下它可以工作(并为“所有端口”创建虚拟目录),或者我指定一个不存在的,并且它不起作用 - 它本质上是一个非常复杂的“安装失败”布尔标志。

标签: iis wix virtual-directory


【解决方案1】:

所有虚拟目录都植根于网站。如果 WebSite 元素位于 Component 元素下,则 WebSite 元素可用于创建网站,否则可用于查找网站。 VirtualDir 元素必须以某种方式引用 WebSite 元素。这就是 IIS 的设计,因此 WiX 以这种方式建模。

注意:有人可能会争辩说,不在 Component 元素下的 WebSite 元素应该被命名为“WebSiteSearch”之类的。

【讨论】:

  • 我知道 VirtualDir 元素必须以某种方式引用 WebSite 元素,但是为什么即使使用现有站点,WebSite 元素也需要显式指定端口?
  • 我的 IIS7 上有许多站点,其中大多数都有虚拟目录,我没有看到根站点和其他站点之间有任何提及
  • WebSite 元素随着时间的推移慢慢变化,以允许以不同的方式找到您想要的网站。最初的想法是,唯一保证网站的独特价值是它的端口。后来我们添加了通过 id 和描述查找网站的功能。看看文档。该元素比此时应有的复杂一点,因为我们对 IIS 的理解随着时间的推移而发生了变化......并且 IIS 将指导从 IIS5 更改为 IIS6 到 IIS7。
【解决方案2】:

我发现只要提供SiteId 属性,端口实际上就会被忽略。因此,我的问题的解决方案是将我的 WebSite 元素更改为:

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

请注意,Port 属性仍然是必需的(并且不能为 0),但即使 SiteId 属性为 *(意味着描述用于标识站点)也会被忽略。

更多信息请参见WebSite Element (WiX documentation)

【讨论】:

  • 对我不起作用。安装程序使用 http 和端口 1 更新了绑定
  • 更新:我明白了!!!如果您不想创建站点,则 iis:WebSite 不得位于组件下,每个 wixtoolset.org/documentation/manual/v3/xsd/iis/website.htmlNesting WebSite under Product, Fragment, or Module results in a web site "locator" record being created in the IIsWebSite table. This means that the web site itself is neither installed nor uninstalled by the MSI package
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
相关资源
最近更新 更多