【问题标题】:Wix: How to add files to the RemoveFiles table from c++Wix:如何从 C++ 将文件添加到 RemoveFiles 表
【发布时间】:2012-01-03 01:55:06
【问题描述】:

我一直在听从这个问题的建议。

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

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

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

我正在寻找有关此的更多信息。我不太确定如何在 c++ 中实现这一点,而且我的搜索结果也不是很多。

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

谢谢 尼尔


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

【问题讨论】:

    标签: c++ wix windows-installer


    【解决方案1】:

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

    阅读Tactical directory nukes 了解如何使用它的示例。


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

    【讨论】:

    • +1,我不知道 RemoveFolderEx 已经在工具集中了。那很好! @Neil,我强烈建议您使用这种方法 - 无论如何它都会比任何自定义操作更好、更安全。
    【解决方案2】:

    您将不得不按此顺序使用以下函数:

    • MsiDatabaseOpenView - (输入)句柄是您在自定义操作函数中获得的句柄
    • MsiCreateRecord - 用里面的 SQL 东西创建一个记录
      • MsiRecord* - 准备记录的一组函数
    • MsiViewExecute 将新记录插入到您喜欢的任何表中...
    • MsiCloseHandle - 带有第一步的句柄和记录句柄(来自MsiCreateRecord

    一切都详细解释over at MSDN。但是,请特别注意“不适用于自定义操作的函数”部分。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多