繁体   English   中英

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

[英]how to check if next record exists in an msi file?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM