c ++检查已安装的程序

嗨,我想知道什么程序安装在我的系统上,我使用MsiEnumProducts和MsiGetProductInfo函数,但不是所有的应用程序,我可以看到“添加/删除程序”我得到的这个function。

枚举注册表项:

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载

bool EnumInstalledSoftware(void) { HKEY hUninstKey = NULL; HKEY hAppKey = NULL; WCHAR sAppKeyName[1024]; WCHAR sSubKey[1024]; WCHAR sDisplayName[1024]; WCHAR *sRoot = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; long lResult = ERROR_SUCCESS; DWORD dwType = KEY_ALL_ACCESS; DWORD dwBufferSize = 0; //Open the "Uninstall" key. if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, sRoot, 0, KEY_READ, &hUninstKey) != ERROR_SUCCESS) { return false; } for(DWORD dwIndex = 0; lResult == ERROR_SUCCESS; dwIndex++) { //Enumerate all sub keys... dwBufferSize = sizeof(sAppKeyName); if((lResult = RegEnumKeyEx(hUninstKey, dwIndex, sAppKeyName, &dwBufferSize, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS) { //Open the sub key. wsprintf(sSubKey, L"%s\\%s", sRoot, sAppKeyName); if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, sSubKey, 0, KEY_READ, &hAppKey) != ERROR_SUCCESS) { RegCloseKey(hAppKey); RegCloseKey(hUninstKey); return false; } //Get the display name value from the application's sub key. dwBufferSize = sizeof(sDisplayName); if(RegQueryValueEx(hAppKey, L"DisplayName", NULL, &dwType, (unsigned char*)sDisplayName, &dwBufferSize) == ERROR_SUCCESS) { wprintf(L"%s\n", sDisplayName); } else{ //Display name value doe not exist, this application was probably uninstalled. } RegCloseKey(hAppKey); } } RegCloseKey(hUninstKey); return true; }