Как обновить расширение пространства имен оболочки без перезапуска проводника?
У меня есть расширение пространства имен оболочки, использующее папку файловой системы в качестве точки соединения (путем создания файла desktop.ini с CLSID моего расширения в папке).
При обновлении до новой версии расширения я бы хотел избежать перезапуска всех процессов с загруженным расширением (что является рекомендуемым ответом в разделе Как правильно выгружать C++ Shell Extension DLL), чтобы обеспечить лучший пользовательский опыт.
Я пробовал:
- SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL)
- SHFlushSFCache, который был предложен в разделе Перезагрузить расширение пространства имен в explorer.exe, который не удалось загрузить ранее
- SHGetSetFolderCustomSettings с FCS_FORCEWRITE, как предлагается в http://microsoft.public.platformsdk.shell.narkive.com/6r9JXG8r/explorer-in-vista-does-not-react-to-a-change-of-clsid-in-desktop-ini
Ничто из вышеперечисленного не приводит к тому, что проводник загружает новую версию расширения.
Я также попытался зарегистрировать совершенно новый CLSID для новой версии расширения и удалить регистрацию для старой. В основном это работает, за исключением случаев открытия любых ранее существующих ярлыков, указывающих на папку. В этом случае ни старое, ни новое расширение не загружаются, и для отображения папки используется папка оболочки по умолчанию. Я снова попробовал SHChangeNotify, SHFlushSFCache и SHGetSetFolderCustomSettings, и ни один из них не устранил эту проблему с помощью ярлыков.
Я проверил это на Windows 7 и Windows 10 Fall Creators.