8

背景:我有一个 Wix 安装程序,其中在现有 IIS 网站中创建了一个虚拟目录。创建了虚拟目录(在安装之前它不存在),但应该已经创建了 IIS 网站(用户只需在 ListBox 中选择要安装的网站)。

问题:卸载时,安装到的 IIS 网站的物理路径变为空白,该属性没有值。下面是我的主要 wix 文件的精简版本。我不确定为什么卸载会影响 IIS 网站,但任何想法都值得赞赏。

注意:我使用的是 Wix 3.5 和 Windows Server 2008 R2、IIS 7。

<Product>

    <Property Id='WEBSITE_DESCRIPTION'>
      <RegistrySearch Id='RememberPropertyWEBSITE_DESCRIPTION' Root='HKCU'
        Key='SOFTWARE\Company\Product' Name='InstalledWebsiteDescription'
        Type='raw' />
    </Property>

    <Property Id='WEBSITE_PORT'>
      <RegistrySearch Id='RememberPropertyWEBSITE_PORT' Root='HKCU'
        Key='SOFTWARE\Company\Product' Name='InstalledWebsitePort'
        Type='raw' />
    </Property>


    <Component Id='PropertiesToSave' Directory='ApplicationFolder'>
      <RegistryValue Root='HKCU' Key='SOFTWARE\Company\Product'
        Name='InstalledWebsiteDescription' Value='[WEBSITE_DESCRIPTION]'
        Type='string' />
      <RegistryValue Root='HKCU' Key='SOFTWARE\Company\Product'
        Name='InstalledWebsitePort' Value='[WEBSITE_PORT]'
        Type='string' />

      <RemoveFolder Id='CleanupApplicationFolder' On='uninstall' />
    </Component>


    <Directory Id='TARGETDIR' Name='SourceDir'>
      <Component Id='TestWebVirtualDirComponent' Guid='12345678-6304-410E-A808-E3585379EADB'>
        <CreateFolder />
        <iis:WebVirtualDir Id='TestWebVirtualDir' Alias='[WEBSITE_VIRTUALDIR]' Directory='TARGETDIR' WebSite='MyWebsite'>
          <iis:WebApplication Id='TestWebApplication' Name='Test' />
        </iis:WebVirtualDir>
      </Component>
    </Directory>

    <iis:WebSite Id="MyWebsite" Description="[WEBSITE_DESCRIPTION]" SiteId="*">
      <iis:WebAddress Id="AllUnassigned" Port="[WEBSITE_PORT]" />
    </iis:WebSite>

    <Feature>
      <ComponentRef Id='TestWebVirtualDirComponent'/>
      <ComponentRef Id='PropertiesToSave'/>
    </Feature>
</Product>
4

1 回答 1

5

WiX IIsExtension通过子WebAddress元素的描述属性和端口属性识别网站。因此,当您安装应用程序时,您需要以某种方式设置 WEBSITE_DESCRIPTION 和 WEBSITE_PORT。但是,当您运行卸载时,没有设置提到的属性,并且您会得到您描述的行为。

解决方案是将所需的属性值保存到系统注册表并使用RegistrySearch元素读取值并设置适当的属性。这被称为“记住属性”模式,Rob Mensching在这里完美地解释了这一点。

于 2011-01-19T07:39:36.397 回答