我想得到已安装的windows更新的列表。
我编译了32位可执行文件,并在64位计算机(Windows10)上运行它
我调用函数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;}
有什么想法吗?
谢谢!
发布于 2019-03-04 23:18:29
一个空洞的声音低语道:"64位子进程“。
更严重的是,你在这里所做的是试图制作一个操作系统维护工具,而不是将工具与操作系统相匹配。别这么做,伙计。无论如何,都要将工具位与操作系统位相匹配。
不存在32位进程不能启动64位进程的规则。
https://stackoverflow.com/questions/54986084
复制相似问题