如何删除非空文件夹

本文关键字:文件夹 删除 何删除 | 更新日期: 2023-09-27 18:25:23

我已经阅读了这个网站上所有有这样问题的主题,但没有找到我需要的。

我有一个程序的两个版本:旧的和新的。在旧版本中,我有文件夹f1。在新版本中,我没有这个文件夹f1。

当新程序的安装程序检测到旧版本时,它会删除这个旧版本,但不会删除文件夹f1。

如何从新版本的安装程序中删除f1?

      <Component Id ="deleteall"  Guid="AA11A32B-9E1E-458A-8C94-3EFEDA77E494" >
        <RemoveFolder Id='iDocDir' On='both' />
      </Component>
      <Directory Id="iDocDir" Name="iDocs">
      </Directory>

不工作=(

如何删除非空文件夹

您应该签出UtilExtension中的RemoveFolderEx元素。它正是你想要的。鲍勃·阿恩森以前也写过博客。

<Component Id="deeletall" Guid="PUT-GUID-HERE">
    <util:RemoveFolderEx Id="RemoveiDocDir" On="uninstall" Property="iDocDir" />
</Component>

它通过将临时行写入RemoveFile表来工作。然而,如手册所述,使用有一些限制:

因为它可能会极大地影响Windows安装程序的文件成本,临时行必须在CostInitialize标准之前写入行动遗憾的是,MSI没有为您的包中的目录层次结构,直到稍后,在CostFinalize中行动

一个简单的解决方法,适用于在卸载是将目录路径写入注册表并加载它在卸载过程中。

如果使用自定义操作来设置属性,请确保计划在WixRemoveFoldersEx自定义操作之前执行。

在Bob的帖子中:

由于添加要删除的目录和文件会影响MSI的文件成本计算,RemoveFolderEx必须在成本计算之前完成它的工作。遗憾的是,MSI没有为目标目录设置属性直到成本计算完成。

如果您已经在注册表中保存了以前的安装路径(Rob在这里解释了如何做到这一点),那么您就可以了,因为AppSearch操作在CostInitialize之前运行。