Как удалить shell extension?
От: raspopov Россия https://www.cherubicsoft.com/
Дата: 16.11.04 19:28
Оценка:
Какой способ программно выгрузить уже дерегистрированное расширение оболочки (shell extension) наименее безболезненен для юзера и системы? Подразумевается что в Explorerе уже нет ни одного объекта, просто он по своей обычной привычке держит загруженные библиотеки "на всякий случай". Я рассмотрел такие:
1: Перегрузить машину. 100% действеннный, 100% раздражающий юзера.
2: Прибить Explorer по MSDN: PostMessage (FindWindow("Progman",NULL),WM_QUIT,0,0). Не всегда прибивается то, что надо (explorerов может быть много), да и юзер будет весьма удивлен. Кстати при таком способе Explorer не сохраняет свои настройки.
3: Как-нибудь ухитриться вызвать изнутри Explorerа функцию CoFreeUnusedLibraries. Иногда не работает (по MSDN может ждать до 10 минут), иногда почему-то выгружает чужие расширения причем используемые, как следствие развал всего десктопа.
4: Пнуть Explorer по MSDN: SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); Выгружается резвее, но не гарантированно.

Может есть еще способы или их комбинация?
Re: Как удалить shell extension?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 17.11.04 04:19
Оценка: -1
Здравствуйте, raspopov, Вы писали:

R>3: Как-нибудь ухитриться вызвать изнутри Explorerа функцию CoFreeUnusedLibraries. Иногда не работает (по MSDN может ждать до 10 минут)


в XP появилась CoFreeUnusedLibrariesEx, которая может выгрузить немедленно
Re[2]: Как удалить shell extension?
От: raspopov Россия https://www.cherubicsoft.com/
Дата: 21.11.04 09:31
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

R>>3: Как-нибудь ухитриться вызвать изнутри Explorerа функцию CoFreeUnusedLibraries.

OE>в XP появилась CoFreeUnusedLibrariesEx, которая может выгрузить немедленно

Это я и так знал, тем более, что описание этой функции лежит в MSDN рядом с первой. Тока она часто выгружает расширения которые используються, что ведет к невероятному крешу десктопа, то ли она работает излишне агрессивно, то ли эти расширения многопоточные и не держат интстанс проводника, вобщем лажа. Мне бы способ гранантированно выпнуть из проводника мое собственное расширение. Может есть какие способы насильно закрыть хэндл dll-ки в другой программе? Это нужно для инсталляции/деинсталляции расширения.
Re: Как удалить shell extension?
От: Аноним  
Дата: 04.04.08 14:12
Оценка:
Здравствуйте, raspopov, Вы писали:

R>...


Как-нибудь удалось решить эту проблему?
Re[2]: Как удалить shell extension?
От: raspopov Россия https://www.cherubicsoft.com/
Дата: 05.04.08 06:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как-нибудь удалось решить эту проблему?


Если исключить мной описанные способы, то нет.
Re[3]: Как удалить shell extension?
От: Аноним  
Дата: 06.04.08 19:30
Оценка:
Здравствуйте, raspopov, Вы писали:

R>Если исключить мной описанные способы, то нет.


А на каком варианте остановились?

И по поводу:

R>4: Пнуть Explorer по MSDN: SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); Выгружается резвее, но не гарантированно.


Разве вызов SHChangeNotify приводит к выгрузке DLL расширения оболочки? Оболочка больше "не воспринимает" соответствующее расширение, но DLL по-прежнему "держит".
Re[4]: Как удалить shell extension?
От: raspopov Россия https://www.cherubicsoft.com/
Дата: 07.04.08 03:19
Оценка:
Здравствуйте, Аноним, Вы писали:

R>>Если исключить мной описанные способы, то нет.

А>А на каком варианте остановились?

А есть варианты?

R>>4: Пнуть Explorer по MSDN: SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); Выгружается резвее, но не гарантированно.

А>Разве вызов SHChangeNotify приводит к выгрузке DLL расширения оболочки? Оболочка больше "не воспринимает" соответствующее расширение, но DLL по-прежнему "держит".

Переадресуй вопрос Биллу.
Re: Как удалить shell extension?
От: Vi2 Удмуртия http://www.adem.ru
Дата: 07.04.08 06:22
Оценка:
Здравствуйте, raspopov, Вы писали:

R>Может есть еще способы или их комбинация?


А можно выяснить, что держит Explorer: код или библиотеку типов?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Как удалить shell extension?
От: Аноним  
Дата: 07.04.08 11:29
Оценка: 15 (2)
#Имя: FAQ.com.shell.extension.remove
Здравствуйте, raspopov, Вы писали:

R>Может есть еще способы или их комбинация?


Интересный способ "подсмотрел" у WinRAR'а. Он переименовывает длл расширения после разрегистрации и помечает ее для удаления после перезагрузки, после чего копирует новую длл и регистрирует ее. Просто, как грабли, и вроде работает.
shell extension
Re: Как удалить shell extension?
От: Аноним  
Дата: 08.01.09 15:14
Оценка:
Здравствуйте, raspopov, Вы писали:

R>Какой способ программно выгрузить уже дерегистрированное расширение оболочки (shell extension) наименее безболезненен для юзера и системы? Подразумевается что в Explorerе уже нет ни одного объекта, просто он по своей обычной привычке держит загруженные библиотеки "на всякий случай". Я рассмотрел такие:

R>1: Перегрузить машину. 100% действеннный, 100% раздражающий юзера.
R>2: Прибить Explorer по MSDN: PostMessage (FindWindow("Progman",NULL),WM_QUIT,0,0). Не всегда прибивается то, что надо (explorerов может быть много), да и юзер будет весьма удивлен. Кстати при таком способе Explorer не сохраняет свои настройки.
R>3: Как-нибудь ухитриться вызвать изнутри Explorerа функцию CoFreeUnusedLibraries. Иногда не работает (по MSDN может ждать до 10 минут), иногда почему-то выгружает чужие расширения причем используемые, как следствие развал всего десктопа.
R>4: Пнуть Explorer по MSDN: SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); Выгружается резвее, но не гарантированно.

R>Может есть еще способы или их комбинация?


Хотелось бы узнать мнение о таком варианте:
1. Определить Explorer.exe процесс
2. Запустить удалённый поток ( CreateRemoteThread )
3. Внутри потока определить HMODULE нужной нам dll по пути ( GetModuleHandle )
4. Запустить FreeLibrary

Плюсы:
+ контролируем процесс освобождения dll
+ гарантировано её выгружаем

Минусы:
— нужны права админа, чтобы установить необходимые привелегии и запустить удалённый поток
— процессов explorer.exe — может быть несколько
— относительно много кода

Какие ещё могут быть трудности и риски???
Re[2]: Как удалить shell extension?
От: raspopov Россия https://www.cherubicsoft.com/
Дата: 08.01.09 16:00
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>4. Запустить FreeLibrary

А>Какие ещё могут быть трудности и риски???

Всё просто рухнет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.