我真正想做的是确定 MSI 中的特定文件是否存在并包含特定字符串。
我目前的想法是运行:
db = msilib.OpenDatabase('c:\Temp\myfile.msi',1)
query = "select * from File"
view = db.OpenView(query)
view.Execute(None)
cur_record = view.Fetch() # do this until I get the record I want
print cur_record.GetString(3) # do stuff with this value
然后如果它在那里,使用提取所有文件
msiexec /a c:\Temp\myfile.msi /qn TARGETDIR=c:\foo
并使用任何解析器来查看我的字符串是否存在。但我希望存在一种不那么笨重的方式。