<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中站点绑定的实际当前值。 我已经通过使用自定义操作解决了类似的问题(在卸载之前保存值,在安装后恢复)。也许还有另一种方式?
答案 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]属性,之后我推荐的先前实现将使用适当的值来完成。