Расширение оболочки Windows не вызывает инициализацию - PullRequest
2 голосов
/ 18 мая 2011

Я надеялся, что кто-то здесь имел некоторое представление о том, что может быть причиной этой проблемы.Я реализовал несколько расширений COM для Explorer, которые предоставляют ShellIconOverlays и ContextMenu, и наложения работают отлично.Контекстное меню работает нормально, когда я щелкаю по рабочему столу, но когда я щелкаю правой кнопкой мыши в любом экземпляре проводника, я вижу интерфейс, запрашиваемый в отладчике, и создается экземпляр IShellExtInit, но функция инициализации не вызывается в проводнике.экземпляры, но он вызывается нормально с рабочего стола, и элемент ContextMenu запрашивается сразу после.

Кто-нибудь здесь видел что-нибудь подобное раньше?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Если вы отлаживаете расширение оболочки, есть вероятность, что вы имели возможность прервать запущенный процесс explorer.exe и запустить новый. Когда вы запустили новую, она работала с тем же уровнем целостности, что и оригинал?

Говорят ли в настройках вашего Проводника просмотр файлов в новом процессе? Если так, этот процесс выполняется с тем же уровнем целостности, что и исходный?

Кроме того, поскольку вы используете отладчик, есть вероятность, что вы создали отладочную сборку. Разве explorer.exe иногда пытается загрузить отладочную сборку вашей DLL, а иногда пытается загрузить релизную сборку вашей DLL?

0 голосов
/ 11 сентября 2014

ОК, я столкнулся с точно такой же проблемой здесь, и оказалось, что проблема связана с

ThreadingModel = Apartment 

По сути, я думаю, что вы испытываете то, что второй поток explorer.exe (рабочий стол выполняется в потоке STA) использует стандартный (устаревший) ThreadingModel - и ожидает, что ваш COM реализовать IMarshal сделать IPC. Apartment ThreadingModel позволяет сосуществовать нескольким экземплярам вашего класса IShellExt.


Предупреждение - Если вы используете ActiveQt для разработки расширений оболочки контекстного меню, есть еще несколько хитростей, которые можно использовать.

...