Установка расширения оболочки не распознается 64-разрядной оболочкой Windows 7 - PullRequest
2 голосов
/ 22 января 2010

У меня есть расширение оболочки Copy Hook Handler, которое я пытаюсь установить в Windows 7 64-bit.

DLL расширения оболочки скомпилирована в двух отдельных версиях для 32-битной и 64-битной Windows.

В DLL реализован DLLRegisterServer, который добавляет необходимые записи реестра.

После добавления записей реестра он вызывает следующую строку кода для nofity оболочки Windows:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);

Все отлично работает на 32-битной Windows7. Оболочка сразу распознает расширение.

В 64-разрядной версии расширение оболочки распознается только после перезапуска оболочки.

Что я могу сделать, чтобы расширение было распознано без перезапуска 64-битной оболочки?

1 Ответ

2 голосов
/ 26 января 2010

Как оказалось, проблема не была характерна для 64-битной Windows.

После консультаций с Microsoft я узнал, что это поведение влияет на обработчики копирования хуков как в 32-, так и в 64-битных системах. SHChangeNotify () с API-интерфейсом SHCNE_ASSOCCHANGED, по-видимому, не приводит к перезагрузке оболочки обработчиками копирования.

По словам представителя Microsoft:

Оболочка создает и кэширует список зарегистрированных обработчиков ловушек копирования при первом вызове обработчиков ловушек копирования в процессе. После того, как список создан, не существует механизма обновления или очистки кэша, кроме завершения процесса. Это относится к проводнику Windows и любому другому процессу, который может вызывать функции файла оболочки, например, SHFileOperation. Наилучший вариант, который мы можем предложить на этом этапе, - перезагрузить систему после регистрации обработчика перехватчика копирования.

Надеюсь, это кому-нибудь поможет!

...