读取msi文件内容

来源:互联网 发布:unity3d下载安装教程 编辑:程序博客网 时间:2024/06/06 02:29

读取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);
原创粉丝点击