Получить обновления системы Windows с помощью wuapi

В моем приложении я показываю, есть ли на компьютере с Windows доступные обновления, которые должны совпадать с настройками «Центра обновления Windows». Я использую такой код, который обычно работает.

#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» их нет. Я проверил журналы, есть некоторые обновления, которые помечены как «неполные/недействительные», поэтому они не отображаются на странице настроек «Центр обновления Windows», но этот код по какой-то причине получает их. Я думаю, что проблема в использовании неправильного поискового запроса. Возможно
"IsInstalled=0 and IsHidden=0"недостаточно. Можно ли точно узнать, какой запрос используется в настройках «Центр обновления Windows» для отображения обновлений и использования того же запроса в моем приложении?


person Ashot    schedule 31.03.2020    source источник


Ответы (1)


Решение состоит в том, чтобы добавить к критериям «IsAssigned=1».

person Ashot    schedule 31.03.2020