如何检查msi文件中是否存在下一条记录?

时间:2017-11-17 12:57:12

标签: c# python vbscript wix windows-installer

使用MsiViewFetch,我们可以从sql查询获取记录到msi。 但是有没有常量或函数可以检查文件表msi中是否存在下一条记录或行数/记录数?

1 个答案:

答案 0 :(得分:3)

没有。 Windows Installer的SQL实现相当有限。所有可用的选项是重复调用MsiViewFetch,直到它返回 ERROR_NO_MORE_ITEMS 。一旦检索完所有记录,它就会这样做。您可以在整个过程中跟踪计数,并正确处理所有返回的对象。 (例如,必须使用MsiCloseHandle关闭每个成功返回的记录,并且在特殊情况下,可能需要使用MsiViewClose关闭视图本身。)

如上所述,这可能在包装它的不同语言中表达不同。例如,如果您已经检索了所有记录,则Windows Installer Automation接口的View.Fetch方法将返回 Nothing 。清理资源通常会被更改为使用相关语言的惯例。

特别是,Python的msilib是Windows Installer功能的包装,专门用于支持创建Python自己的安装程序。因为它不是用于一般用途,它缺乏其他包装的一些生物舒适。您可以看到implementation of View.Fetch将任何非成功返回代码转换为MSIError, ERROR_NO_MORE_ITEMS 不是 ERROR_SUCCESS 。因此,对于您的使用,您必须捕获MSIError并希望它是ERROR_NO_MORE_ITEMS,或者检查嵌入的 103 的异常字符串。