读取msi文件内容
(2011-12-29 10:34:22)
标签: msi it | 分类: WindowsInstaller |
所需要的库:Msi.lib; 头文件:Msiquery.h
函数调用顺序:(函数的具体用法查看MSDN,msi文件内部结构可通过Orca工具察看)
MSIHANDLE hMsiHandle,
hView,
hRecord; 1.
MsiOpenDatabase(strMsiPath, MSIDBOPEN_READONLY, &hMsiHandle);//strMsiPath是msi文件的完整路径,路
经中的"\"要替换为"\\"。函数返回ERROR_SUCCESS表示成功。 2.
MsiDatabaseOpenView(hMsiHandle, _T("Select * from CustomAction"), &hView); MsiViewExecute(hView, NULL); //SQL Syntax: "Select * from Binary WHERE Name = 'NewBinary20'"从Binary中读取Name为NewBinary20的
//一行信息,具体语法在MSDN中输入
SQL Syntax。 3.
while(MsiViewFetch(hView, &hRecord) == ERROR_SUCCESS) { LPTSTR Action, Type, Source, Target; DWORD dwStringLen = MAX_PATH; int dwCustomAction;
MsiRecordGetString(hRecord, 1, Action, &dwStringLen); //每次调用要保证第三个参数的值足够大,
//由于此处是引用,所以每次调用完以后dwStringLen的值会改变成此次实际读取的内容长度。下次不进行
//初始化而直接用此变量就可能出错。
dwCustomType = MsiRecordGetInteger(hRecord, 2); //Type的类型是int型 dwStringLen = MAX_PATH; MsiRecordGetString(hRecord, 3, Source, &dwStringLen ); dwStringLen = MAX_PATH; MsiRecordGetString(hRecord, 4, Target, &dwStringLen ); } 4.
MsiCloseHandle(hView); MsiCloseHandle(hMsiHandle);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!