Dave G
Dave G

Reputation: 41

Windows Shell Extension Not Calling Initialize

I was hoping somebody here had some insight into what could be causing this problem. I've implemented several COM extensions for Explorer that provide ShellIconOverlays and a ContextMenu, and the overlays work perfectly. The Context Menu works fine when I click on the desktop but when I right click in any explorer instance, I can see the interface being queried in the debugger and an instance of IShellExtInit being generated but the initialize function doesn't get called in the explorer instances, but it is called fine from the desktop and a ContextMenu item is queried immediately after.

Has anybody here seen anything like this before?

Upvotes: 2

Views: 480

Answers (2)

qdot
qdot

Reputation: 6335

OK, I run into the exact same problem here, and it turns out that the issue has to do with

ThreadingModel = Apartment 

Basically, what I think you are experiencing, is that the second thread of explorer.exe (desktop runs in STA thread) uses the default (legacy) ThreadingModel - and expects your COM to implement IMarshal to do IPC. Apartment ThreadingModel allows multiple instances of your IShellExt class to co-exist.


Caveat - If you are using ActiveQt to develop Context Menu Shell Extensions, there are few more tricks to use.

Upvotes: 0

Windows programmer
Windows programmer

Reputation: 8065

If you're debugging a shell extension, chances are that you've had occasions to terminate the running explorer.exe process and start a new one. When you started a new one, was it running with the same integrity level as the original?

Do your Explorer settings say to browse files in a new process? If so, is that process running with the same integrity level as the original?

Also, since you're running a debugger, chances are that you built a debug build. Does explorer.exe sometimes try to load the debug build of your DLL and sometimes try to load the release build of your DLL?

Upvotes: 2

Related Questions