私が本当にやりたいことは、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
任意のパーサーを使用して、文字列がそこにあるかどうかを確認します。しかし、私はより不格好な方法が存在することを望んでいます。