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中的站点绑定的实际当前值。 我已经通过使用自定义操作解决了类似的问题(在卸载前保存值,安装后恢复)。也许还有另一种方式?WiX如何在主要升级时保持站点端口
答
这是我做的:
在第一安装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>
正如你可以看到你可以创建许多注册表项/值存储您的初始设置,你可以阅读与主要升级期间的安装程序一起使用。
UPDATE:
如果你想使用IIS当前配置的端口,你将需要使用自定义操作与我上面提到的解决方案相结合。
您的自定义操作将需要输入参数与“网站名称”,您将不得不从注册表中检索它,然后将其作为CustomActionData传递给您的CA.
一旦您检索到在IIS中配置的端口,您将需要使用新值更新您的[SITEBINDINGPORT]属性,之后我推荐的前一个实现将使用适当的值执行这个技巧。
(对不起,因为我的英文不好)我已将端口值保存在注册表中。但是,如果我在网站设置中更改了端口值,则注册表中的值将为旧值,并且在升级时将被恢复。我必须保持绑定的当前值。 – 2014-11-26 05:55:35
@ user3432369请查看我上面的更新。 – Rolo 2014-11-26 15:07:36