我已阅读该网站上存在此类问题的所有主题,但找不到我需要的内容。
我有一个程序的两个版本:旧版本和新版本。
在旧版本中我有文件夹 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>
不工作=(
您应该查看RemoveFolderExUtilExtension 中的元素。它完全符合您的要求。鲍勃·阿恩森 (Bob Arnson) 之前曾在博客中谈到过这一点。
<Component Id="deeletall" Guid="PUT-GUID-HERE">
<util:RemoveFolderEx Id="RemoveiDocDir" On="uninstall" Property="iDocDir" />
</Component>
它的工作原理是将临时行写入RemoveFile
桌子。但是,如手册中所述,使用此功能有一些限制:
因为它可能会极大地影响 Windows Installer 的文件成本计算,
临时行必须在 CostInitialize 标准之前写入
行动。不幸的是,MSI 不会为
包中的目录层次结构,稍后在 CostFinalize 中
行动。
针对删除文件夹的典型用例的简单解决方法
uninstall是将目录路径写入注册表并加载
它在卸载过程中。
如果您使用自定义操作来设置属性,请确保它们是
安排在 WixRemoveFoldersEx 自定义操作之前。
鲍勃的帖子中也提到:
由于添加要删除的目录和文件会影响MSI的文件
成本核算,RemoveFolderEx 必须在成本核算之前完成其工作。
不幸的是,MSI 没有设置目标目录的属性
直至成本核算完成后。
如果您已经保存了之前的安装路径(Rob 解释了如何执行此操作)here)在注册表中,没问题,因为 AppSearch 操作在 CostInitialize 之前运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)