Деинсталирането на WIX не премахва сайта на Windows server 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