获取Msi文件的属性内容
来源:互联网 发布:淘宝店组织架构 编辑:程序博客网 时间:2024/06/13 05:36
void MsiGetPropertyByOpenPackage(){MSIHANDLE msiHandle = NULL;UINT uiOpenState;TCHAR* szMsiFileName= _T("C:\\Program Files (x86)\\远为软件\\virnos client\\SWar.msi");uiOpenState = MsiOpenPackage(szMsiFileName, &msiHandle);if (ERROR_SUCCESS != uiOpenState){// errorreturn;}TCHAR* szValueBuf = NULL;DWORD cchValueBuf = 0;UINT uiState =MsiGetProperty(msiHandle, TEXT("ProductName"), TEXT(""), &cchValueBuf);if (ERROR_MORE_DATA == uiState){++cchValueBuf;szValueBuf = new TCHAR(cchValueBuf);if (szValueBuf){uiState = MsiGetProperty(msiHandle, TEXT("ProductName"), szValueBuf, &cchValueBuf);}}MsiCloseHandle(msiHandle);}调用MsiOpenPackage函数来获取MSIHANDLE值,然后就可以获取属性值,MsiOpenPackage使用的时候会打开msi文件,会看到程序运行时的界面,再调用MsiCloseHandle(hInstall)函数就关闭msi文件,也会看到msi程序运行界面消失。
用该方法的时候就会看到有msi瞬间闪现安装界面,体验感觉不好
因此使用MsiOpenDatabase打开msi文件,然后再获取,后面相继使用MsiDatabaseOpenView,MsiViewExecute,MsiViewFetch,MsiRecordGetString等方法,
使用MsiCloseHandle关闭打开的msi句柄。
BOOL GetMsiPropertyProductVersion(CString strMsiName, CString &strVer ){USES_CONVERSION;MSIHANDLE hMsiHandle = NULL;UINT uiStatus = MsiOpenDatabase(strMsiName, MSIDBOPEN_READONLY, &hMsiHandle);if (ERROR_SUCCESS != uiStatus){return FALSE;}MSIHANDLE hView = NULL;MsiDatabaseOpenView(hMsiHandle, _T("SELECT * FROM Property WHERE Property = 'ProductVersion'"), &hView);MSIHANDLE hRecord = NULL;MsiViewExecute(hView, hRecord);if (MsiViewFetch(hView, &hRecord) == ERROR_SUCCESS){TCHAR szName[MAX_PATH]={0};TCHAR szValue[MAX_PATH]={0};DWORD dwStringLen = MAX_PATH;MsiRecordGetString(hRecord, 1, szName, &dwStringLen);dwStringLen = MAX_PATH;MsiRecordGetString(hRecord, 2, szValue, &dwStringLen );printf("%s\t:%s\r\n", T2A(szName), T2A(szValue));strVer = szValue;MsiCloseHandle(hView);MsiCloseHandle(hMsiHandle);return TRUE;}MsiCloseHandle(hView);MsiCloseHandle(hMsiHandle);return FALSE;}UINT GetMsiAllProperty(CString strMsiName ){USES_CONVERSION;MSIHANDLE hMsiHandle = NULL;UINT uiStatus = MsiOpenDatabase(strMsiName, MSIDBOPEN_READONLY, &hMsiHandle);if (ERROR_SUCCESS != uiStatus){return uiStatus;}MSIHANDLE hView = NULL;MsiDatabaseOpenView(hMsiHandle, _T("SELECT * FROM Property"), &hView);MSIHANDLE hRecord = NULL;MsiViewExecute(hView, hRecord);while(MsiViewFetch(hView, &hRecord) == ERROR_SUCCESS){TCHAR szValueBuf[MAX_PATH]={0};TCHAR Source[MAX_PATH]={0};DWORD dwStringLen = MAX_PATH;MsiRecordGetString(hRecord, 1, szValueBuf, &dwStringLen);dwStringLen = MAX_PATH;MsiRecordGetString(hRecord, 2, Source, &dwStringLen );printf("%s\t:%s\r\n", T2A(szValueBuf), T2A(Source));}MsiCloseHandle(hView);MsiCloseHandle(hMsiHandle);return 1;}
阅读全文
0 0
- 获取Msi文件的属性内容
- 读取msi文件内容
- 关于获取属性文件的内容
- attributesOfItemAtPath获取文件的大小、文件的内容等属性
- spring boot获取属性文件内容
- msi文件的脚本安装
- msiexec Msi文件在命令行安装的命令帮助内容 来自微软帮助Windows (R) Installer
- MFC获取文件的内容
- 获取文件内容的大小
- Java中如何获取spring中配置的properties属性文件内容
- Java中如何获取spring中配置的properties属性文件内容
- Java中如何获取spring中配置的properties属性文件内容
- Java中如何获取spring中配置的properties属性文件内容
- MSI 文件
- .msi文件
- 获取图片文件的属性
- c# 获取文件的属性;
- 获取文件的详细属性
- Aptana Studio3 解决unresolved import的问题
- Map的三个遍历方法
- HTML5的history 的API实例
- myeclipse中编辑时的各种快捷键
- android上如何写配置文件
- 获取Msi文件的属性内容
- 利用kaptcha实现验证码(SpringMVC实现)
- 在一个activity中不同的fragment中加载百度地图时,百度地图重合叠加覆盖的解决方案
- MySQL5.7 数据字典表损坏
- linux系统(centos7)安装node
- Linux混杂设备驱动
- 搭建自己的git服务器 gitlib
- spring cloud搭建微服务second-fiberhome(二):结合consul实现服务注册与服务发现
- JSP 自定义标签