.net Wix不会卸载IIS Web应用程序

.net Wix不会卸载IIS Web应用程序,.net,iis,installation,wix,wix-extension,.net,Iis,Installation,Wix,Wix Extension,我正在使用WIX3.5构建一个MSI安装程序,在IIS7中安装两个Web应用程序。用户可以为每个应用程序选择是在“默认网站”下安装,还是在IIS中的任何其他现有网站下安装。 安装程序通过在IIS中创建两个Web应用程序在安装过程中正常工作。问题是,卸载产品后,一个应用程序被删除,而另一个应用程序留在IIS管理器中,因此必须手动删除。 所有与WebApp相关的文件都将被删除,组件也将被删除,但iiswebapp将被保留。 安装程序针对x86和x64目标体系结构进行编译。 我正在Windows Se

我正在使用WIX3.5构建一个MSI安装程序,在IIS7中安装两个Web应用程序。用户可以为每个应用程序选择是在“默认网站”下安装,还是在IIS中的任何其他现有网站下安装。 安装程序通过在IIS中创建两个Web应用程序在安装过程中正常工作。问题是,卸载产品后,一个应用程序被删除,而另一个应用程序留在IIS管理器中,因此必须手动删除。 所有与WebApp相关的文件都将被删除,组件也将被删除,但iiswebapp将被保留。 安装程序针对x86和x64目标体系结构进行编译。 我正在Windows Server 2008 R2中测试安装程序

注:

  • 此问题仅发生在x64 Windows Server 2008 R2中。在x86中,两者都是 应用程序已从IIS中正确删除
  • 只有当两个应用程序都安装在以下位置时,问题才会发生 同一个网站(一个被删除,另一个被留下)
  • 我尝试安装了3个Web应用程序,发现其中两个被删除,第三个被留下。reamining Web应用程序取决于它们在Product.wxs中定义的顺序
  • 我在卸载过程中检查了空属性,但不是这样
  • 通过从WebService应用程序中删除“iis:WebApplication”标记元素,可以从iis中删除虚拟目录
我看不出我做错了什么。我在Stackoverflow上读过很多关于这个问题的文章,但我没有发现这个问题。我非常感谢你在这个问题上的帮助或指导

这是我在该网站上的第一篇帖子,如果我有任何错误,请原谅。 我一直在寻找解决这个问题的方法,但没有发现任何人有这个问题。也许我的WIXXML代码有问题

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>

未安装、未升级和未安装(重新安装~=“全部”)

我看不到您的功能或产品元素。您是将这些组件构建到1个MSI还是2个MSI中

一般来说,请阅读安装程序日志,查看卸载时是否有任何组件被遗留下来。我在共享组件/多实例安装中经常看到这一点。解决方法之一是给组件一个假文本文件,将其标记为密钥文件,并将组件标记为共享


除了猜测,详细的答案还需要更多信息。

您好,谢谢您的回答。我已经检查了一段时间的日志,发现有人请求卸载这些组件,并且这些组件已被卸载。(请求:缺席,操作:缺席)文件被删除,所有内容都被删除,但WebApp仍保留在IIS管理器控制台中。我有两个功能,每个都安装一个包含所有组件的WebApp。此外,我正在从相同的源代码将所有内容构建到2个MSI中。我编译一次以生成一个MyProduct-x86.msi,第二次编译以获得MyProduct-x64.msi。是否同时安装这两个?您可能有一个组件规则冲突,它扰乱了组件引用计数,导致未完全卸载组件/资源(IIS meta)。否,我有一个Windows 2008 R2 64位的VM,另一个是Windows 2008 32位的VM。我在64位虚拟机中尝试x64 MSI,在另一个虚拟机中尝试x86 MSI。问题发生在安装这两个webapp时,所以我一直在搜索它们的共同点,但在代码中没有发现任何差异。它们就像复制粘贴。有趣的是,我已经提到,在安装3个Webapp时,留下的Webapp取决于在Product.wxsI中声明WebVirtualDirectory的顺序。我有一个非常类似的问题:我的安装程序创建了一个单独的网站,其中包含子虚拟目录。启用UAC时,不会在Windows Server 2008 R2上使用原始安装程序卸载它。有趣的细节:从控制面板运行卸载成功删除站点。只有在直接运行原始安装程序时才会出现此问题。希望这一细节将有助于调查此事