Wix:如何从c ++向RemoveFiles表添加文件

时间:2011-11-21 15:14:06

标签: c++ wix windows-installer

我一直在关注这个问题的建议。

How to add a WiX custom action that happens only on uninstall (via MSI)?

我有一个可执行文件在InstallFinalize之后作为自定义操作运行,我打算清除所有文件和文件夹。我只是想编写一些标准的删除逻辑,但我坚持认为Rob Mensching认为Windows安装程序应该处理这个问题,因为有人会在卸载过程中保释。

“创建一个CustomAction,将临时行添加到RemoveFiles表”

我正在寻找更多相关信息。我不太确定如何在c ++中实现这一点,而且我的搜索并没有发现很多。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa371201(v=vs.85).aspx

由于 尼尔


编辑:我已经标记了答案,因为有关如何在c ++中将文件添加到removeFiles表的具体问题但是我倾向于同意更好的解决方案是使用wix中的RemoveFolderEx功能,即使它目前处于测试阶段(我认为是3.6)

2 个答案:

答案 0 :(得分:3)

粗略地说,您必须按此顺序使用以下功能:

  • MsiDatabaseOpenView - (输入)句柄是您在自定义操作函数中获得的句柄
  • MsiCreateRecord - 创建一个包含SQL内容的记录
    • MsiRecord* - 准备记录的一组功能
  • MsiViewExecute将新记录插入您喜欢的任何表格中......
  • MsiCloseHandle - 使用第一步的句柄和记录句柄(来自MsiCreateRecord

详细解释了所有内容over at MSDN。但是,请特别注意“自定义操作中不使用的功能”部分。

MsiViewExecute的文档还解释了SQL查询的外观。要了解它们,您可能需要使用属于Windows Installer SDK的.vbs脚本之一。

答案 1 :(得分:3)

如果您使用WiX创建安装包,请考虑使用RemoveFolderEx元素。它可以满足您的需求,您无需亲自编写代码。

阅读Tactical directory nukes以获取如何使用它的示例。


如果您仍想自己实现它,可以从this blog post获得灵感,这里有用于在VBScript中执行此操作的代码。