一、API接口
通过MSI的API来查询 ,参见MSDN说明 MsiQueryProductState
INSTALLSTATE MsiQueryProductState( _In_ LPCTSTR szProduct );
MsiQueryProductState的输入参数为产品ID,其返回值为产品安装状态,若返回值为INSTALLSTATE_DEFAULT则表示已安装。
返回值及安装状态:
安装状态 | 返回整数值 | 含义 |
---|---|---|
INSTALLSTATE_INVALIDARG | -2 | 无效的参数传递给该函数。 |
INSTALLSTATE_UNKNOWN | -1 | 不公布或者未安装该产品。 |
INSTALLSTATE_ADVERTISED | 1 | 该产品已公布但尚未安装。 |
INSTALLSTATE_ABSENT | 2 | 不同的用户安装该产品。 |
INSTALLSTATE_DEFAULT | 5 | 为当前用户安装该产品。 |
二、MS VC产品代码
Visual C++ 2010 redistributable package product codes
- Visual C++ 2010 Redistributable Package (x86) - {196BB40D-1578-3D01-B289-BEFC77A11A1E}
- Visual C++ 2010 Redistributable Package (x64) - {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
- Visual C++ 2010 Redistributable Package (ia64) - {C1A35166-4301-38E9-BA67-02823AD72A1B}
Visual C++ 2010 SP1 redistributable package product codes
- Visual C++ 2010 SP1 Redistributable Package (x86) - {F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
- Visual C++ 2010 SP1 Redistributable Package (x64) - {1D8E6291-B0D5-35EC-8441-6616F567A0F7}
- Visual C++ 2010 SP1 Redistributable Package (ia64) - {88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}
SP是Service Pack,是一个补丁包,是VC++2010的加强版本。在原有的基础上进行了一点优化,几乎没差别。
三、C++示例代码
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <msi.h>
#pragma comment(lib,"Msi.lib")
int main()
{
INSTALLSTATE install_state;
install_state = MsiQueryProductState(L"{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}"); //for vc2010 sp1 x86 runtime
if (install_state == INSTALLSTATE_DEFAULT)
{
::MessageBox(NULL, L"已经安装", L"Success", MB_OK | MB_ICONINFORMATION);
}
else
{
::MessageBox(NULL, L"请安装", L"Error", MB_OK | MB_ICONERROR);
}
getchar();
}