WIX卸载不会删除Windows Server 2008 R2上的站点

时间:2012-10-09 12:37:08

标签: web wix windows-installer iis-7.5 uninstall

我有设置网站的安装程序。安装程序使用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上安装站点。所有列出的环境都可以安装。安装程序执行每台计算机的安装。我使用deffered自定义操作来启用所需的IIS组件等,因此安装程序首先在没有管理员权限的情况下运行,并在单击按钮“Install”时询问它们。

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

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

如果您有更好的方法在各种环境下安装网站,我也很乐意听到它 - 我发明的轮子可能不是最好的=)。

如果您需要卸载日志,则为here

1 个答案:

答案 0 :(得分:2)

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

<Property Id="SITE_NAME" Secure="yes">
<Property Id="SITE_APP_NAME" Secure="yes">