В моем приложении я показываю, есть ли на компьютере windows доступные обновления, которые должны совпадать с настройками "Windows Update". Я использую такой код, который обычно работает.
#include "stdafx.h"
#include <wuapi.h>
#include <iostream>
#include <ATLComTime.h>
#include <wuerror.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
hr = CoInitialize(NULL);
IUpdateSession* iUpdate;
IUpdateSearcher* searcher;
ISearchResult* results;
BSTR criteria = SysAllocString(L"IsInstalled=0 and IsHidden=0");
hr = CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateSession, (LPVOID*)&iUpdate);
hr = iUpdate->CreateUpdateSearcher(&searcher);
wcout << L"Searching for updates ..."<<endl;
hr = searcher->Search(criteria, &results);
SysFreeString(criteria);
//...
}
Моя проблема в том, что на некоторых машинах этот код дает результат, что есть доступные обновления, но на странице настроек "Windows Update" нет , Я проверил журналы, есть некоторые обновления, которые помечены как «неполные / недействительные», поэтому они не отображаются на странице настроек «Windows Обновление», но этот код получает их по некоторым причинам. Я думаю, что проблема заключается в использовании неправильного поискового запроса. Может быть,
"IsInstalled=0 and IsHidden=0"
недостаточно. Можно ли точно узнать, какие параметры запроса "Windows Update" используются для отображения обновлений и использовать тот же запрос в моем приложении?