首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SHGetKnownFolderItem -在Wow64上失败

SHGetKnownFolderItem -在Wow64上失败
EN

Stack Overflow用户
提问于 2019-03-04 23:12:40
回答 1查看 127关注 0票数 2

我想得到已安装的windows更新的列表。

我编译了32位可执行文件,并在64位计算机(Windows10)上运行它

我调用函数SHGetKnownFolderItem来获取FOLDERID_AppUpdates的已知文件夹,但是,我得到的是E_INVALIDARG

在x64中,它工作得很好。我不能用32位编译它。

我选择这个选项是因为它是最快的。

代码:

代码语言:javascript
复制
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;

}

有什么想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-03-04 23:18:29

一个空洞的声音低语道:"64位子进程“。

更严重的是,你在这里所做的是试图制作一个操作系统维护工具,而不是将工具与操作系统相匹配。别这么做,伙计。无论如何,都要将工具位与操作系统位相匹配。

不存在32位进程不能启动64位进程的规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54986084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档