![](/img/trans.png)
[英]Wix - Msi :How to check if a particular row exists in a msi Data table or not
[英]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.