WiX如何保持站点端口的重大升级

时间:2014-11-25 12:48:32

标签: wix

<Component Id="IisComponent" Guid="someGuid" Win64="yes" KeyPath="yes">
    <iis:WebSite Directory="INSTALLDIR" AutoStart="yes" Id="WebSite" Description="someDescription" >
    <iis:WebAddress Header="[SITEBINDINGHOST]" Id="WebSiteAddress" IP="*" Port="[SITEBINDINGPORT]" />
    <iis:WebApplication Id="WebApp" Name="someApplicationName" WebAppPool="AppPool" />
    <iis:WebDirProperties Id="DirProperties" WindowsAuthentication="yes" AnonymousAccess="no" LogVisits="yes" />
    </iis:WebSite>
    <some other blocks />
</Component>

我的意思是IIS中站点绑定的实际当前值。 我已经通过使用自定义操作解决了类似的问题(在卸载之前保存值,在安装后恢复)。也许还有另一种方式?

1 个答案:

答案 0 :(得分:0)

这就是我的所作所为:

首次安装时,AppSearch会尝试在给定的注册表项中找到一个值,但它找不到任何内容,然后该属性将被设置为默认值。

在主要升级期间,AppSearch将在给定的注册表项中找到一个值,并将该属性设置为该值。

<Property Id="WEBSITEPORT" Value="80">
    <RegistrySearch Id="WebSitePortSearch" Type="raw" Root="HKLM" Key="$(var.RootKey)\$(var.IISWebSiteKey)" Name="Port"/>
</Property>

启动升级安装程序时将显示所有这些注册表项,并且将在卸载旧版本之前设置这些注册表项。

现在您需要在安装期间创建注册表项,如下所示:

<Component Id="CommonWebSiteRegistry">
    <RegistryKey Root="HKLM" Key="$(var.RootKey)\IIS Config" Action="createAndRemoveOnUninstall">
        <RegistryValue Type="string" Name="Description" Value="[WEBSITEDESCRIPTION]"/>
        <RegistryValue Type="string" Name="Port" Value="[WEBSITEPORT]"/>
        <RegistryValue Type="string" Name="HostName" Value="[HOSTNAME]"/>
        <RegistryValue Type="string" Name="AppPool" Value="[APPPOOLNAME]"/>
        <RegistryValue Type="string" Name="AppPoolRuntimeVersion" Value="$(var.ASPRuntime)"/>
        <RegistryValue Type="string" Name="PhisicalDir" Value="[WebSiteRoot]"/>
    </RegistryKey>
</Component>

如您所见,您可以创建尽可能多的注册表项/值来存储初始设置,并且可以在主要升级期间使用安装程序读取它们。

<强>更新

如果要在IIS上使用当前配置的端口,则需要使用自定义操作并结合上面提到的解决方案。

您的自定义操作需要输入参数,其中包含&#34;网站名称&#34;您必须从注册表中检索它,然后将其作为CustomActionData传递给您的CA。

检索IIS中配置的端口后,您需要使用新值更新[SITEBINDINGPORT]属性,之后我推荐的先前实现将使用适当的值来完成。