Wix - 使用 XSLT 停止在卸载时删除目录

Wix - Using XSLT to stop a directory being removed on uninstall

我的 MSI 安装程序将捆绑大量附加文件以供安装。这工作正常,但是,在卸载/升级时我们希望保留这些文件。

因为它们是捆绑在而不是组件中的,所以我不能使用通常的声明方式使组件永久化。

我发现以下代码可以识别安装目录中的文件并使它们永久化

 <xsl:if test="contains(*[local-name()='File']/@Source, 'PCSTDESC')">
   <xsl:attribute name="NeverOverwrite"><xsl:text>yes</xsl:text></xsl:attribute>
   <xsl:attribute name="Permanent"><xsl:text>yes</xsl:text></xsl:attribute>        
 </xsl:if> 

但是这是针对特定文件的,在我的示例中不会有特定文件或扩展名,我只想保留整个 'Documents' 目录

我尝试了以下方法,但还没有成功

<xsl:if test="contains(*[local-name()='Directory']/@Name, 'Documents')">
  <xsl:attribute name="NeverOverwrite"><xsl:text>yes</xsl:text></xsl:attribute>
  <xsl:attribute name="Permanent"><xsl:text>yes</xsl:text></xsl:attribute>
</xsl:if>

关于如何让它按预期工作有什么建议吗?

我不确定您如何将目录标记为永久目录,但您可以尝试标记目录中的所有文件。

试试这个...

<xsl:if test="contains(parent::*[local-name()='Directory']/@Name, 'Documents')">