1

我有设置网站的安装程序。安装程序使用 WIX 3.5 实现。组件安装站点如下:

  <DirectoryRef Id="TARGETDIR">
    <Directory Id="WWWROOT">
    </Directory>
  </DirectoryRef>

  <Property Id="WWWROOT" Value="C:\inetpub\wwwroot">
    <RegistrySearch Id="FindInetPubFolder" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="PathWWWRoot" Type="directory" />
  </Property>

  <Component Id="CC_AppPoolConfigure" Guid="YOURGUID-9558-4CAE-A928-EACD27D69A0D" KeyPath="yes" Permanent="no">
    <iis:WebAppPool Id="CC_AppPool" Name="[SITE_APP_POOL]" ManagedRuntimeVersion="v4.0" ManagedPipelineMode="integrated" />
  </Component>

  <Component Id="CC_Iis6SiteConfigure" Guid="YOURGUID-13E2-4980-A55A-E37E3E06FB67" KeyPath="yes" Permanent="no">
    <Condition><![CDATA[Installed OR (IISMAJORVERSION AND (IISMAJORVERSION = "#6"))]]></Condition>
    <iis:WebSite Id="CC_WebSite_IIS6" Description="[SITE_NAME]"
                 AutoStart="yes" StartOnInstall="yes" ConfigureIfExists="yes"
                 Directory="WWWROOT" ConnectionTimeout="360" SiteId="[SITE_ID]">
      <iis:WebVirtualDir Id="CC_Site_IIS6_VDir" Directory="SITE_INSTALLDIR" Alias="[SITE_VIRT_DIR]">
        <iis:WebApplication Id="CC_IIS6_WebApp" Name="[SITE_APP_NAME]" WebAppPool="CC_AppPool"  >
          <iis:WebApplicationExtension Verbs="GET,HEAD,POST" CheckPath="no" Script="yes" Executable="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" />
        </iis:WebApplication>

        <iis:WebDirProperties Id="CC_Site_IIS6_Properties" WindowsAuthentication="yes" AnonymousAccess="yes"/>
      </iis:WebVirtualDir>

      <iis:WebAddress Id="CC_Site_IIS6_Header_Bindings" Port="[SITE_PORT]" Header="[SITE_HEADER]" />
    </iis:WebSite>
  </Component>

  <Component Id="CC_IIS6_Config_Extentions" Guid="YOURGUID-009A-4545-8D4D-EC5437D7332F" KeyPath="yes" Permanent="yes">
    <Condition><![CDATA[IISMAJORVERSION AND (IISMAJORVERSION = "#6")]]></Condition>
    <iis:WebServiceExtension Id="CC_ExtensionASP4" Group="ASP.NET v4.0.30319" Allow="yes" File="[FRAMEWORKROOT]v4.0.30319\aspnet_isapi.dll" Description="ASP.NET v4.0.30319"/>
  </Component>

  <Component Id="CC_Iis7Site" Guid="YOURGUID-1738-476A-945F-A97721F5ECFC" KeyPath="yes" Permanent="no">
    <Condition><![CDATA[IISMAJORVERSION AND (IISMAJORVERSION >= "#7")]]></Condition>
    <iis:WebSite Id="CC_WebSite_IIS7" Description="[SITE_NAME]"
                 AutoStart="yes" StartOnInstall="yes" ConfigureIfExists="yes"
                 Directory="WWWROOT" ConnectionTimeout="360" SiteId="[SITE_ID]">

      <iis:WebVirtualDir Id="CC_Site_IIS7_VDir" Directory="SITE_INSTALLDIR" Alias="[SITE_VIRT_DIR]">
        <iis:WebApplication Id="CC_IIS7_WebApp" Name="[SITE_APP_NAME]" WebAppPool="CC_AppPool"></iis:WebApplication>

        <iis:WebDirProperties Id="CC_Site_IIS7_Properties" WindowsAuthentication="yes" AnonymousAccess="yes"/>

      </iis:WebVirtualDir>

      <iis:WebAddress Id="CC_Site_IIS7_Header_Binding" Port="[SITE_PORT]" Header="[SITE_HEADER]" />

    </iis:WebSite>
  </Component>

如您所见,站点需要安装在 IIS 6、IIS 7 和 IIS 7.5 上。在所有列出的环境中都可以安装。安装程序执行每台机器的安装。我使用延迟自定义操作来启用所需的 IIS 组件等,因此安装程序首先在没有管理员权限的情况下运行,并在单击“安装”按钮时询问它们。

但是使用用于安装产品的相同安装程序文件卸载产品时出现问题 - 站点和虚拟目录留在 IIS 上。它仅在启用 UAC 且仅在通过运行安装程序文件并在第一个对话框中选择“删除”选项进行卸载时才会出现在 Windows Server 2008 R2 (IIS 7.5) 上。我在几个环境(Windows Server 2003、2003 R2、2008 x86、2008 x64、2008 R2)上对此进行了测试,看起来 2008 R2 是唯一存在问题的环境。其他调查表明,禁用 UAC 可以解决问题。通过控制面板卸载产品或使用卸载参数从命令行运行相同的 msi 也没有此问题。因此,存在问题的情况非常有限,但它仍然很重要。

我几乎可以肯定问题出在 UAC 限制:也许安装程序会在显示 UAC 对话框以授予权限之前尝试卸载站点。但我不明白我该如何解决它。任何帮助将不胜感激。

如果您有更好的方法在如此不同的环境中安装站点,我也会很高兴听到它——我发明的轮子可能不是最好的 =)。

如果您需要卸载日志,它在这里

4

1 回答 1

2

我们遇到了同样的问题,并通过将包含网站和应用程序名称的属性更改为 Secure="yes" 来解决它。在您的情况下,请确保:

<Property Id="SITE_NAME" Secure="yes">
<Property Id="SITE_APP_NAME" Secure="yes">
于 2013-05-24T10:32:17.377 回答