【问题标题】:Wix - Using XSLT to stop a directory being removed on uninstallWix - 使用 XSLT 阻止在卸载时删除目录
【发布时间】:2018-01-16 14:02:54
【问题描述】:

我的 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> 

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

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

<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>

关于如何使其按预期工作的任何建议?

【问题讨论】:

  • 你能把目录下的所有文件都永久化吗? &lt;xsl:if test="contains(parent::*[local-name()='Directory']/@Name, 'Documents')"&gt; 之类的东西?
  • 这些是什么文件?为什么您的应用程序不创建它们?您可以在 INSTALLDIR 下保留只读模板,以便在需要时复制到用户的“我的文档”文件夹中?
  • @TimC 如果您想将其作为答案,这已经奏效,但请注意,如果目录为空,它们将被删除,只有当目录中有文件时,它们才会被保留
  • 我已将其添加为答案

标签: xslt wix windows-installer uninstallation


【解决方案1】:

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

试试这个...

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

【讨论】:

  • 这适用于我的场景,正如我在上面的评论中提到的,如果目录中的文件夹是空的,那么它仍然会被删除,但如果文件夹包含任何文件,那么它们会被保留。这是一个完美的结果
猜你喜欢
  • 2010-09-16
  • 2011-11-23
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多