Windows Shell扩展未调用Initialize

时间:2011-05-17 22:24:45

标签: c++ windows shell com contextmenu

我希望这里有人能够了解导致这个问题的原因。我已经为Explorer提供了几个COM扩展,它们提供了ShellIconOverlay和ContextMenu,并且叠加层工作得很好。当我单击桌面时,上下文菜单工作正常,但是当我右键单击任何资源管理器实例时,我可以看到在调试器中查询的接口和生成的IShellExtInit实例但是在资源管理器中没有调用初始化函数实例,但从桌面调用它并在之后立即查询ContextMenu项。

以前有人在这看过这样的事吗?

2 个答案:

答案 0 :(得分:2)

如果您正在调试shell扩展,可能是您有时间终止正在运行的explorer.exe进程并启动一个新进程。当你开始一个新的运行时,它是否与原始运行时具有相同的完整性级别?

您的资源管理器设置是否说要在新进程中浏览文件?如果是,那么该进程是否以与原始进程相同的完整性级别运行?

此外,由于您正在运行调试器,因此您可能构建了调试版本。 explorer.exe有时会尝试加载DLL的调试版本,有时会尝试加载DLL的发布版本吗?

答案 1 :(得分:0)

好的,我在这里遇到了完全相同的问题,事实证明这个问题与

有关
ThreadingModel = Apartment 

基本上,我认为您遇到的是,explorer.exe的第二个主题(桌面在STA线程中运行)使用默认(遗留)ThreadingModel - 并期望您的COM实施IMarshal来做IPC。 Apartment ThreadingModel允许您的IShellExt类的多个实例共存。


警告 - 如果您使用ActiveQt开发Context Menu Shell Extensions,则可以使用更多技巧。