首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Invoke命令::Invoke()不再被调用?

为什么Invoke命令::Invoke()不再被调用?
EN

Stack Overflow用户
提问于 2022-10-27 17:36:23
回答 1查看 89关注 0票数 1

我已经创建了一个文件资源管理器上下文菜单扩展,它使用IExplorerCommand接口将菜单命令添加到Windows11上下文菜单中。

这一直运行良好,但在上一次Windows更新之后,它不再正常工作。

尽管菜单命令仍然出现,但当我单击其中任何一个命令时,都不会发生任何情况。我添加了日志记录,我可以看到IExplorerCommand::Invoke()不再被调用。

奇怪的是,如果我选择"Show“菜单来获得旧的Windows 10上下文菜单,那么命令从该菜单中可以正常工作,只有在新的Windows 11上下文菜单中它们才不能工作。

在选择菜单命令时,我尝试在调试器中运行File,当我单击命令时,在“输出”窗口中得到类似的行:

onecore\com\combase\dcomrem\stdid.cxx(726)\combase.dll!00007FF9EB9947F5:(调用者: 00007FF9C22E1E38) ReturnHr(2627) tid(67bc) 8001010E应用程序称为为另一个线程封送的接口。

我猜这就是为什么我的命令没有被调用的原因。有没有人对造成这种情况的原因有任何建议?它会不会是文件资源管理器中的一个bug?

我尝试过STA和MTA线程模型,而改变这一点并没有什么不同。

EN

Stack Overflow用户

回答已采纳

发布于 2022-10-29 20:14:06

嗯,在这件事上浪费了几个小时之后,我终于找到了解决办法!

我的代码基于这里的PhotoStoreContextMenu示例代码:https://github.com/microsoft/AppModelSamples/tree/master/Samples/SparsePackages/PhotoStoreContextMenu

它使用Windows C++模板库(WRL),并定义该类使用的基类,如下所示:

代码语言:javascript
运行
复制
class TestExplorerCommandBase : public RuntimeClass<RuntimeClassFlags<ClassicCom>, IExplorerCommand, IObjectWithSite>

为我的代码修复它的修改是使用WinRtClassicComMix而不是ClassicCom,即

代码语言:javascript
运行
复制
class TestExplorerCommandBase : public RuntimeClass<RuntimeClassFlags<WinRtClassicComMix >, IExplorerCommand, IObjectWithSite>

我很确定这个问题是在我安装KB5019509时开始的,它是改变文件资源管理器( File )的Windows,使它现在有选项卡。

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

https://stackoverflow.com/questions/74226129

复制
相关文章

相似问题

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