wix - 安装 MSI 之前删除文件和目录

标签 wix windows-installer custom-action delete-file

我们的产品多年来都是通过 InstallShield 安装程序安装的。我今年将安装更改为 MSI (WiX)。现在 MSI 应该清理该目录,该目录保持不变。

我在 MSI 中实现了一个自定义操作来开始卸载旧产品:

 <CustomAction Id="UninstallIS" Property="QtExecCA" Value="&quot;[WindowsFolder]IsUn0407.exe&quot; -f &quot;[ProgramFilesFolder]\company\product\Uninst.isu&quot;" Execute="deferred" />
 <CustomAction Id="QtExecCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no" />

删除旧产品后,会有一些临时文件和一些子目录因客户端而异,并且 InstallShield 安装程序无法识别,因此我会尝试通过 MSI 删除它们。

记住UAC,我认为我不能使用命令行命令来执行此操作,而且“删除文件表”在这里没有用处(对于许多未知文件和许多目录)。

有什么可能的方法来做到这一点?

感谢您的帮助!

最佳答案

您可以使用将模拟标记设置为“否”的延迟自定义操作。这样它将在具有完全权限的本地系统帐户下运行。

自定义操作可以使用自定义代码(例如 EXE 或 DLL)或命令行。

请注意,延迟的自定义操作只能在 InstallExecuteSequence 中的 InstallInitialize 操作之后安排。

顺便说一句,请确保对其进行彻底测试。从目标机器上删除文件是非常危险的。你永远不知道你最终会删除什么。

关于wix - 安装 MSI 之前删除文件和目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6456549/

相关文章:

InstallShield 执行卸载自定义操作

wix - wix SetProperty After属性不会采取自定义操作ID

wix - 如何自定义 Wix 进度对话框?

postgresql - 使用 WiX 安装程序安装 PostGreSql

windows - 如何在 32 位批处理脚本中运行 64 位版本的 Windows 实用程序(例如 msiexec)?

wix - 如何使用 WiX Burn 智能安装 .NET 4.x

xml - 强制执行注册表值引用的最低 DLL 版本

c# - WiX:在卸载时正确删除非空的临时文件和文件夹

visual-studio-2005 - 普通用户运行时 .NET 应用程序的 MSI 快捷方式

windows-installer - 任何验证之前的 Windows Installer 自定义操作