使用MsiViewFetch,我们可以从sql查询获取记录到msi。 但是有没有常量或函数可以检查文件表msi中是否存在下一条记录或行数/记录数?
答案 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 的异常字符串。