1.所需win32 api:
MsiSetInternalUI 、 MsiInstallProduct;
2.头文件、库:
#include <msi.h>
#pragma comment(lib,"Msi.lib")
3.代码:
//静默安装
MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
UINT nRet = MsiInstallProduct("C:\\Bonjour64.msi", _T("ACTION=INSTALL REBOOT=ReallySuppress"));
if (ERROR_SUCCESS == nRet)
{
printf(("[CMsiInstaller::Install] --------Install Success-----------\n"));
return true;
}
if (nRet == 0x652)//该错误码,代表有msiexec在运行并占用
{
printf("[CMsiInstaller::Install] [0x652] try to kill msiexec...");
killProcessByName(_T("msiexec"));
printf("[CMsiInstaller::Install] try to install again");
nRet = MsiInstallProduct(strPackage.c_str(), _T("ACTION=INSTALL REBOOT=ReallySuppress"));
if (ERROR_SUCCESS == nRet)
{
printf(("[CMsiInstaller::Install] --------Install Success-----------\n"));
return true;
}
else
{
printf("[CMsiInstaller::Install]Failed to Install again");
}
}