2017-05-18 3 views
0

msi 파일을 읽고 그것에 쿼리를해야합니다. 하지만 그것은 파이썬에 대한 표준 lib이지만, 그것은 가난한 documentation을 가지고있는 것 같습니다. 쿼리를 만들려면 데이터베이스 스키마를 알고 있어야하며 파일에서 가져 오는 예제 나 메서드를 찾을 수 없습니다.파이썬 msilib로 msi 읽기

는 여기에 내가 일하기 위해 노력하고있어 내 코드입니다 :

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입니다. 하지만 MSI 파일을 InstEd 도구로 열고 File이 테이블 목록에 있고 거기에 많은 레코드가 있다는 것을 알 수 있습니다. 내가 뭘 잘못하고있어?

답변

0

마지막 줄에서 샘플에 NameError가 throw되므로 코드가 의심스러운 것입니다. 그럼 그 선을 무시합시다.

실제 문제는 view.Execute이 아무 것도 사용하지 않는다는 것입니다. 후드 아래에서 MsiViewExecute 함수는 성공 또는 실패 만 반환합니다. 전화를 한 후에는 view.Fetch으로 전화해야합니다. 이는 마지막 행의 의도 일 수 있습니다.