我已经创建了一个文件资源管理器上下文菜单扩展,它使用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线程模型,而改变这一点并没有什么不同。
发布于 2022-10-29 20:14:06
嗯,在这件事上浪费了几个小时之后,我终于找到了解决办法!
我的代码基于这里的PhotoStoreContextMenu示例代码:https://github.com/microsoft/AppModelSamples/tree/master/Samples/SparsePackages/PhotoStoreContextMenu
它使用Windows C++模板库(WRL),并定义该类使用的基类,如下所示:
class TestExplorerCommandBase : public RuntimeClass<RuntimeClassFlags<ClassicCom>, IExplorerCommand, IObjectWithSite>
为我的代码修复它的修改是使用WinRtClassicComMix而不是ClassicCom,即
class TestExplorerCommandBase : public RuntimeClass<RuntimeClassFlags<WinRtClassicComMix >, IExplorerCommand, IObjectWithSite>
我很确定这个问题是在我安装KB5019509时开始的,它是改变文件资源管理器( File )的Windows,使它现在有选项卡。
https://stackoverflow.com/questions/74226129
复制相似问题