У меня есть установщик, который настраивает веб-сайт. Установщик реализован с использованием 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 для предоставления разрешений. Но я не могу понять, как я могу это исправить. Любая помощь будет оценена.
Если у вас есть лучший подход к установке сайта на такие разные среды, я тоже был бы рад услышать это - мое изобретенное колесо, вероятно, не самое лучшее =).
Если вам нужен журнал удаления, он находится здесь: