如何判断msi安装包程序是否安装及安装路径

如题所述

使用MSI的函数可以检测软件是否安装,获取安装版本信息等,前提是软件为.msi文件安装的。
在使用前建议加上如下头文件及库依赖:
在CODE上查看代码片派生到我的代码片
#include <Windows.h>
#include <Msi.h>
#pragma comment(lib, "Msi.lib")
1. 检测软件是否安装,upgradeCode用于标示从一个版本升级到另一个版本,一般可以用于判断是否是同一个软件。
[cpp] view plain copy
在CODE上查看代码片派生到我的代码片
bool CheckExistSoftware(wchar_t *upgradeCode) //可以通过工具Orca查看安装包相应的upgradeCode
{
wchar_t productCode[39];
if (ERROR_SUCCESS == MsiEnumRelatedProductsW(upgradeCode, 0, 0, productCode))
{
return true;
}
return false;
}
2. 获取软件的安装路径
在CODE上查看代码片派生到我的代码片
void GetSoftwareInstallPath(const wchar_t *upgradeCode, wchar_t *installPath, DWORD *pathLength)
{
DWORD i = 0;
UINT result;
wchar_t productCode[39];
for (i = 0; ERROR_NO_MORE_ITEMS != (result = MsiEnumRelatedProductsW(upgradeCode, 0, i, productCode)); i++)
{
if (ERROR_SUCCESS == result)
{
if (ERROR_SUCCESS == MsiGetProductInfoW(productCode, INSTALLPROPERTY_INSTALLLOCATION, installPath, pathLength))
{
return;
}
}
}
wcscpy_s(installPath, 2, L"");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-05-01
原因分析:通常win8系统安装第三方的应用需要管理员权限,但是msi程序的右键菜单没有“以管理员身份运行”选项,所以用户就无法正常安装msi软件,提示2502/2503错误,可以参照以下步骤来解决:1、按下Win+X打开快捷菜单,选择“命令提示符(管理员)”,打开管理员模式的命令窗口;2、进入msi文件所在目录,查看文件完整的路径,比如在D:\Others,则完整路径为D:\Others\msxml;3、在管理员命令提示符中输入msiexec /package D:\Others\msxml,按下回车键执行;4、这样就以管理员身份运行该msi安装包,不会再提示2502/2503错误。本回答被提问者采纳
相似回答