Wix Web应用程序扩展可防止卸载Web应用程序

时间:2012-10-01 20:11:01

标签: installer wix windows-installer installation wix3.5

我正在IIS中安装WebApplication。安装运行正常,但是当我尝试卸载我的产品时,WebApplication在IIS中被遗忘。将删除所有文件,但WebApp仍会显示在IIS管理器控制台中。 这是我的组件代码:

<!-- WebServices Virtual Directory -->
<Component Id="IWSVirtualDirectory" Guid="{XXXX...}" DiskId="1" KeyPath="yes" Win64="no">
    <!-- Virtual directory -->
      <iis:WebVirtualDir Id="IWSWebVirtualDirectory" Alias="[IWS_VIRTUAL_DIRECTORY_NAME]" Directory="MyWebServices" WebSite="IWSTargetWebSite">
         <!-- Web Application -->
         <iis:WebApplication Id="IWSWebApplication" Name="MyWebServices-$(var.MAJOR).$(var.MINOR).3" WebAppPool="IWSWebAppPool">
            <!-- ISAPI filter -->
            <iis:WebApplicationExtension Extension="dll" CheckPath="yes" Script="yes" Executable="[#FTIRWWSIsapi_dll]" Verbs="GET,HEAD,POST" />
            <iis:WebApplicationExtension Extension="srf" CheckPath="yes" Script="yes" Executable="[#FTIRWWSIsapi_dll]" Verbs="GET,HEAD" />
         </iis:WebApplication>
        <!-- Properties -->
        <iis:WebDirProperties Id="IWSWebDirProperties" Read="yes" LogVisits="yes" Index="yes" Script="yes" Execute="no" DefaultDocuments="FTIRWWS.htm" BasicAuthentication="no" PassportAuthentication="no" DigestAuthentication="no" IIsControlledPassword="no" WindowsAuthentication="yes" />
      </iis:WebVirtualDir>                               
    </Component>

编辑: 奇怪的是,如果我删除了两个<iis:WebApplicationExtension />只是将处理程序映射到应用程序所服务的文件扩展名,那么WebApplication实际上已被删除。为什么处理程序映射会阻止WebApplication被卸载?是否有任何日志可以检查除Windows Installer日志之外发生了什么?

1 个答案:

答案 0 :(得分:1)

在卸载时未正确设置用于定义虚拟目录别名(应用程序名称)的属性。当您运行安装时,您可能以某种方式设置IWS_VIRTUAL_DIRECTORY_NAME(询问用户,某些逻辑等)但是在卸载时此属性未设置,并且WiX无法找到要删除的虚拟目录卸载。

这是人们常犯的常见错误。你必须以某种方式存储IWS_VIRTUAL_DIRECTORY_NAME的值。最着名的方法is described by Rob Mensching and is called "Remember the property" pattern。按照该文章中的建议,您将能够在安装和卸载之间存储属性。