用python msilib读取msi

时间:2017-05-18 14:06:22

标签: python windows-installer

我需要读取msi文件并对其进行一些查询。但它看起来尽管它是python的标准库,但它很差documentation。 要进行查询,我必须知道数据库模式,我找不到任何从文件中获取它的示例或方法。

这是我正在努力工作的代码:

import msilib

path = "C:\\Users\\Paul\\Desktop\\my.msi" #I cannot share msi
dbobject = msilib.OpenDatabase(path, msilib.MSIDBOPEN_READONLY)
view = dbobject.OpenView("SELECT FileName FROM File")
rec = view.Execute(None)
r = v.Fetch() 

rec变量为None。但我可以使用InstEd工具打开MSI文件,并看到表格列表中存在该文件,并且那里有很多记录。 我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的代码是可疑的,因为最后一行会在您的示例中引发NameError。所以,让我们忽略这一行。

真正的问题是protected function getViewData($articles) { return [ 'articles' => $articles, 'orientation' => $this->getOrientation(), 'subCategoriesWeb' => $this->getSubCategoriesWeb(), 'subCategories2d' => $this->getSubCategories2d(), 'subCategories3d' => $this->getSubCategories3d() ]; } public function searchSubCategories($request) { // ... return view('pages.blog', $this->getViewData($articles)); } public function searchCategory($request) { // ... return view('pages.blog', $this->getViewData($articles)); } 没有任何用处。在引擎盖下,MsiViewExecute函数仅返回成功或失败。在你打电话之后,你需要拨打view.Execute,这可能就是你最后一行所要做的。