Wix не удаляет веб-приложение IIS

Я использую Wix 3.5 для создания установщика MSI, который устанавливает два веб-приложения в IIS 7. Пользователь может выбрать для каждого приложения, устанавливать ли его на «Веб-сайт по умолчанию» или на любой другой существующий веб-сайт в IIS. Установщик правильно работает во время УСТАНОВКИ, создавая два веб-приложения в IIS. Проблема в том, что после удаления продукта одно приложение удаляется, а другое остается в диспетчере IIS, поэтому его приходится удалять вручную. Все файлы, относящиеся к WebApp, удаляются, как и компоненты, но IIS WebApp остается. Установщик скомпилирован как для целевой архитектуры x86, так и для x64. Я тестирую установщик на Windows Server 2008 R2.

Примечания:

  • Проблема возникает только в x64 Windows Server 2008 R2. В x86 оба приложения корректно удалены из IIS.
  • Проблема возникает только тогда, когда оба приложения установлены на одном и том же веб-сайте (одно удаляется, а другое остается).
  • Я попытался установить 3 веб-приложения и обнаружил, что два удалены, а третье осталось. Веб-приложение нового поколения зависит от того, в каком порядке они были определены в Product.wxs.
  • Я проверил пустые свойства во время удаления, и это не так.
  • При удалении элемента тега «iis: WebApplication» из приложения WebService виртуальный каталог удаляется из IIS.

Я не понимаю, что делаю не так. Я прочитал много статей в Stackoverflow об этом, но не нашел этой проблемы. Буду очень признателен за вашу помощь или руководство в этом вопросе.

Это мой первый пост на сайте, прошу прощения, если я сделал какие-то ошибки. Я долго искал решение этой проблемы и не нашел никого с этой проблемой. Возможно, что-то не так с моим XML-кодом Wix.

Соответствующая часть Product.wxs:

<Directory Id="TARGETDIR" Name="SourceDir">
        <!-- Program Files (x86) -->
        <Directory Id="ProgramFilesFolder">             
            <Directory Id="INSTALLDIR_x86" Name="MyApplications">                                   
                <!-- Web Service IIS WebAPP -->
                <Directory Id="WebServicesDIR" Name="MyWebApp1 5.2">
                    <!-- Windows Server 2008 and Vista Application pool -->
                    <Component Id="WebReportingAppPool" Guid="{SOME_GUID}" DiskId="1" KeyPath="yes" Win64="no">
                        <!-- Define Application Pool -->
                        <iis:WebAppPool Id="WebServicesAppPool" Name="Web Reporting 5.2" Identity="networkService" ManagedPipelineMode="integrated" ManagedRuntimeVersion="v2.0" />
                        <!-- remove WebServicesDIR folder on uninstall -->
                        <RemoveFolder Id="WebServicesDIR" On="uninstall" />
                    </Component>
                    <!-- Web App 1 Virtual Directory -->
                    <Component Id="App1_VirtualDirectory" Guid="{SOME_GUID2}" DiskId="1" KeyPath="yes" Win64="no">
                        <!-- Virtual directory -->
                        <iis:WebVirtualDir Id="App1_WebVirtualDirectory" Alias="WebReportingServices_1" Directory="WebServicesDIR" WebSite="IWSTargetWebSite">
                            <!-- Web Application -->
                            <iis:WebApplication Id="WebServicesWebApp" Name="WebReportingServices-5.2" WebAppPool="WebServicesAppPool">                                 
                                <iis:WebApplicationExtension Extension="dll" CheckPath="yes" Script="yes" Executable="[#FIsapi_dll]" Verbs="GET,HEAD,POST" />
                                <iis:WebApplicationExtension Extension="srf" CheckPath="yes" Script="yes" Executable="[#FIsapi_dll]" Verbs="GET,HEAD" />
                            </iis:WebApplication>
                            <!-- Properties -->
                            <iis:WebDirProperties Id="WebServicesWebDirProp" Read="yes" LogVisits="yes" Index="yes" Script="yes" Execute="no" DefaultDocuments="default.htm" BasicAuthentication="no" PassportAuthentication="no" DigestAuthentication="no" IIsControlledPassword="no" WindowsAuthentication="yes" />
                        </iis:WebVirtualDir>
                        <!-- indicate the application is installed -->
                        <RegistryValue Root="HKLM" Key="Software\MyCompany\WebServices-5.2" Name="installed" Type="integer" Value="1" />
                    </Component>
                </Directory>                                                        
            </Directory>
        </Directory>                    
    </Directory>

    <Directory Id="WebTaskFolder" Name="Web Tasks 4.3">
            <!-- Application pool user -->
            <Component Id="IWAApplicationPoolUser" Guid="{SOME_GUID3}" DiskId="1" Permanent="yes" Transitive="yes">
                <!-- do not anything on uninstall/upgrade/reinstall -->
                <Condition>NOT Installed AND NOT UPGRADE AND NOT (REINSTALL ~= "ALL")</Condition>
                <CreateFolder />
                <!-- Application Pool and anonymous User -->
                <util:User Id="IWAApplicationPoolAccount" Domain="[IWA_APP_POOL_DOMAIN]" Name="[IWA_APP_POOL_USERNAME]" Password="[IWA_APP_POOL_PASSWORD]" CreateUser="no" UpdateIfExists="no" RemoveOnUninstall="no">                      
                    <util:GroupRef Id="IISGroup" />
                </util:User>
            </Component>
            <!-- Windows Server 2008 and Vista Application pool -->
            <Component Id="IWAApplicationPool" Guid="{Guid Here}" DiskId="1" KeyPath="yes">
                <!-- Define Application Pool -->
                <iis:WebAppPool Id="IWAWebAppPool" Name="Web Tasks 4.3" Identity="other" User="IWAApplicationPoolAccount" ManagedPipelineMode="integrated" ManagedRuntimeVersion="v2.0" />
                <!-- remove folder on uninstall -->
                <RemoveFolder Id="WebTaskFolder" On="uninstall" />                  
            </Component>
            <!-- Virtual Directory -->
            <Component Id="WebTaskVirtualDir" Guid="{Guid here}" DiskId="1" KeyPath="yes">                  
                <iis:WebVirtualDir Id="IWAWebVirtualDir" Alias="WebTasks4.3" Directory="WebTaskFolder" WebSite="IWATargetWebSite">
                    <!-- Web Application -->
                    <iis:WebApplication Id="WebTasksVirtualDirectoryWebApplication" Name="WebTasks6.3" WebAppPool="IWAWebAppPool" />
                    <!-- Properties -->
                    <iis:WebDirProperties Id="IWAVirtualDirectoryWebDirProperties" AnonymousAccess="yes" AnonymousUser="IWAApplicationPoolAccount" Read="yes" LogVisits="yes" Index="yes" Script="yes"  Execute="no" DefaultDocuments="default.aspx" BasicAuthentication="no" PassportAuthentication="no" DigestAuthentication="no" IIsControlledPassword="no" WindowsAuthentication="yes" />
                </iis:WebVirtualDir>
                <!-- indicate the application is installed -->
                <RegistryValue Root="HKLM" Key="Software\MyCompany\WebTasks-4.2" Name="installed" Type="integer" Value="1" />                   
            </Component>                                
   </Directory>                                 
    <!-- Add Virtual Directory to IWSTargetWebSite -->
    <iis:WebSite Id='IWSTargetWebSite' Description="WebTasks WebApp" Directory="WebServicesDIR" SiteId="[IWS_TARGET_WEBSITE]">
        <iis:WebAddress Id="IWerbServiceWebAddress" IP="*" Port="80" />
    </iis:WebSite>
    <!-- Add Virtual Directory to IWATargetWebSite -->
    <iis:WebSite Id='IWATargetWebSite' Description="WebServices WebApp" Directory="WebTaskFolder" SiteId="[IWA_TARGET_WEBSITE]">
        <iis:WebAddress Id="IWebTaskWebAddress" IP="*" Port="80" />
    </iis:WebSite>

person Herno    schedule 04.09.2012    source источник
comment
У меня очень похожая проблема: мой установщик создает отдельный отдельный веб-сайт с дочерним виртуальным каталогом. Он не удаляется с помощью исходного установщика в Windows Server 2008 R2, когда включен UAC. Интересная деталь: запуск удаления из панели управления успешно удаляет сайт. Проблема возникает только при прямом запуске оригинального установщика. Надеюсь, эта деталь поможет разобраться в этом   -  person Sasha    schedule 08.10.2012


Ответы (1)


Я не вижу ваших элементов Feature или Product. Вы встраиваете эти компоненты в 1 MSI или 2 MSI?

В общем, прочтите журнал установщика, чтобы узнать, не остались ли какие-либо компоненты при удалении. Я часто вижу это в общих компонентах / установках нескольких экземпляров. Решение состоит в том, чтобы предоставить компоненту поддельный текстовый файл, пометить его как ключевой файл и пометить компонент как общий.

Помимо предположений, подробный ответ требует дополнительной информации.

person Christopher Painter    schedule 04.09.2012
comment
Привет и спасибо за ответ. Я некоторое время проверял журналы и обнаружил, что компоненты запрашиваются для удаления, и они были удалены. (Запрос: отсутствует, Действие: отсутствует) Файлы удаляются, все удаляется, но WebApp остается в консоли диспетчера IIS. У меня есть две функции, каждая из которых устанавливает WebApp со всеми компонентами. - person Herno; 04.09.2012
comment
Кроме того, я собираю все в 2 MSI из одного и того же исходного кода. Я компилирую один раз для создания MyProduct-x86.msi и второй для получения MyProduct-x64.msi. - person Herno; 04.09.2012
comment
Вы устанавливаете оба? Вероятно, у вас есть нарушение правил компонентов, которое нарушает подсчет ссылок на компоненты, что приводит к неполному удалению компонентов / ресурсов (мета IIS). - person Christopher Painter; 04.09.2012
comment
нет, у меня есть виртуальная машина с 64-битной Windows 2008 R2 и еще одна с 32-битной Windows 2008. Я пробую x64 MSI в 64-битной виртуальной машине и x86 MSI в другой. Проблема возникает при установке обоих веб-приложений, поэтому я искал, что у них общего, но не нашел никакой разницы в коде. Они похожи на копипаст. Забавно то, что я упомянул, что при установке 3 WebApps оставшееся WebApp зависит от порядка, в котором WebVirtualDirectory объявлен в Product.wxs - person Herno; 04.09.2012