У меня есть dll расширения оболочки, написанная на C++ и COM. DLL зарегистрирована и загружена в память. Моя программа установки обновления сделает следующее:
- Отмените регистрацию dll расширения оболочки, уничтожьте explorer.exe
- Скопируйте более позднюю версию dll расширения оболочки (Шаг 2)
- Запустите explorer.exe
Это работает нормально. Но проблема в следующем:
Если пользователь открыл какие-либо другие приложения (Internet Explorer, иногда диспетчер задач Windows, блокнот и т. д.), шаг Шаг 2 не выполняется.
Есть ли способ закрыть все хуки dll расширения оболочки при обновлении dll.
В dll я использую GetOverlayInfo, контекстное меню, подключение к базе данных и т.д.
explorer.exe
чем-то поможет. Во-первых, это очень агрессивная процедура (установщик Windows вместо этого переместит используемый файл в другое место на том же томе, чтобы установить новый файл в исходное место), а во-вторых, он не может работать вообще, потому что пользователь может использовать совершенно другой файловый менеджер, использующий расширения оболочки. Я делаю это сам, и установщики, делающие такие предположения, просто раздражают. Вы можете удаленно закрывать ссылки, вызывая все виды хаоса. Не делай этого! - person 0xC0000022L   schedule 06.07.2012