Я хочу получить список установленных обновлений Windows.
Я компилирую 32-битный исполняемый файл и запускаю его на 64-битной машине (Windows 10)
Я вызываю функцию SHGetKnownFolderItemчтобы получить известную папку FOLDERID_AppUpdates, однако я получаю E_INVALIDARG
В x64 все работает нормально.У меня есть ограничение для его компиляции в 32-битном формате.
Я выбрал этот вариант, потому что он был самым быстрым.
Код:
void ViewInstalledUpdates()
{
using namespace std;
HRESULT hr = CoInitialize(NULL);
int count = 0;
if (SUCCEEDED(hr))
{
CComPtr<IShellItem> pUpdates;
CComPtr<IEnumShellItems> pShellEnum;
hr = SHGetKnownFolderItem(FOLDERID_AppUpdates, static_cast<KNOWN_FOLDER_FLAG>(0), nullptr, IID_PPV_ARGS(&pUpdates));
hr = pUpdates->BindToHandler(nullptr, BHID_EnumItems, IID_PPV_ARGS(&pShellEnum));
if (pShellEnum)
{
do {
CComPtr<IShellItem> pItem;
CComHeapPtr<WCHAR> szName;
hr = pShellEnum->Next(1, &pItem, nullptr);
if (pItem)
{
HRESULT hres = pItem->GetDisplayName(SIGDN_NORMALDISPLAY, &szName);
std::wcout << static_cast<LPWSTR>(szName) << endl;
count++;
}
} while (hr == S_OK);
}
}
CoUninitialize();
std::wcout << L"Found " << count << " updates" << endl;
return;
}
Есть идеи?
Спасибо!