Удаление WIX не удаляет сайт на сервере Windows 2008 R2

У меня есть установщик, который настраивает веб-сайт. Установщик реализован с использованием 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. Это происходит только в Windows Server 2008 R2 (IIS 7.5), когда включен UAC, и только при удалении с помощью запуска файла установщика и выбора параметра «Удалить» в первом диалоговом окне. Я тестировал это в нескольких средах (Windows Server 2003, 2003). R2, 2008 x86, 2008 x64, 2008 R2), и похоже, что 2008 R2 — единственная среда, в которой присутствует проблема. Другие исследования показали, что отключение UAC решает проблему. Удаление продукта через панель управления или запуск того же msi из командной строки с параметром удаления также не вызывает этой проблемы. Таким образом, есть очень узкий случай, когда проблема присутствует, но все же важна.

Я почти уверен, что проблема связана с ограничениями UAC: возможно, установщик пытается удалить сайт до того, как появится диалоговое окно UAC для предоставления разрешений. Но я не могу понять, как я могу это исправить. Любая помощь будет оценена.

Если у вас есть лучший подход к установке сайта на такие разные среды, я тоже был бы рад услышать это - мое изобретенное колесо, вероятно, не самое лучшее =).

Если вам нужен журнал удаления, он находится здесь:


person Sasha    schedule 09.10.2012    source источник


Ответы (1)


У нас была та же проблема, и мы решили ее, изменив свойства, содержащие имена веб-сайтов и приложений, на Secure="yes". В вашем случае убедитесь, что:

<Property Id="SITE_NAME" Secure="yes">
<Property Id="SITE_APP_NAME" Secure="yes">
person Anton    schedule 24.05.2013
comment
Отличный и простой ответ на ошибку, которая существует уже 8 месяцев! Спасибо! - person Sasha; 24.05.2013