Wix+;IIS:在禁用端口80绑定的网站上创建虚拟目录

Wix+;IIS:在禁用端口80绑定的网站上创建虚拟目录,iis,wix,virtual-directory,Iis,Wix,Virtual Directory,我安装了一个Wix,它通过以下方式在IIS中创建虚拟目录: <DirectoryRef Id="INSTALLLOCATION"> <Component Id="VirtualDirectory" Guid="29BEECCC-AA5F-11DF-BBB1-9C0AE0D72085"> <iis:WebVirtualDir Id="MyVDir" Directory="INSTALLLOCATION" Alias="MyVDir" WebSite="De

我安装了一个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的绑定,则此操作将失败

元素和
端口
属性都是必需的,但是在这种情况下是完全多余的-我不在乎网站的端口是什么,只要它创建了我的虚拟目录


有没有办法让上述安装程序在不提示用户输入端口号的情况下成功创建虚拟目录?

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


注意:有人可能会认为,不在组件元素下的网站元素应该被命名为“WebSiteSearch”或其他名称。

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

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

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


有关更多信息,请参阅。

如果创建虚拟目录,为什么您认为端口无关紧要??!虚拟目录-在哪里?在一个网站上。什么网站?在港口xyz@abatishchev-这有什么关系?一旦我确定要在站点上创建描述为“XYZ”的虚拟目录,就可以指定该站点存在的端口,在这种情况下,它可以工作(并为“所有端口”创建虚拟目录),或者我指定一个不存在且不工作的端口,这本质上是一个非常复杂的“安装时失败”布尔标志。我知道VirtualDir元素必须以某种方式引用网站元素,然而,为什么网站元素即使在使用现有网站时也需要显式指定端口?我的IIS7上有许多网站,其中大多数都有虚拟目录,我没有看到根网站和其他网站之间有任何提及。随着时间的推移,网站元素已经慢慢变化,以允许以不同的方式找到您想要的网站。最初的想法是,网站唯一能保证的唯一价值是它的端口。后来,我们添加了按id和描述查找网站的功能。请看一下文档。由于我们对IIS的理解随着时间的推移而变化,因此元素比现在应该的要复杂一些。。。IIS将指南从IIS5改为IIS6改为IIS7。对我来说不起作用。安装程序用http和端口1更新了绑定:我知道了!!!如果您不想创建站点,则iis:网站不得位于组件下,根据:
在产品、片段或模块下嵌套网站会导致在IIsWebSite表中创建网站“定位器”记录。这意味着MSI软件包既不安装也不卸载网站本身