2011-11-21 21 views
4

我一直在关注这个问题中的建议。Wix:如何将文件添加到C++的RemoveFiles表中

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我认为)

回答

3

粗略地说,您将不得不按以下顺序使用以下功能:

  • MsiDatabaseOpenView - 的(输入)句柄是你内心的自定义操作的功能得到了一个
  • MsiCreateRecord - 与SQL的东西创造纪录的内部
    • MsiRecord* - 的功能来准备记录集
  • MsiViewExecute插入新记录到任何表请你...
  • MsiCloseHandle - 从第一步和记录手柄(从MsiCreateRecord

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

MsiViewExecute的文档也解释了SQL查询的外观。要感受它们,您可能需要使用作为Windows Installer SDK一部分的.vbs脚本之一。

3

如果您使用WiX创建安装包,请考虑使用RemoveFolderEx元素。它做你想做的事情,你不必自己编写代码。

有关如何使用它的示例,请参阅Tactical directory nukes


如果你还是想自己实现它,你可以从this blog post获得灵感,还有在VBScript中这样的代码。

+2

+1,我不知道RemoveFolderEx已经在工具集中了。这很好! @Neil,我强烈建议你使用这种方法 - 无论如何,它会比任何自定义操作更好,更安全。 –

相关问题