Запустите IE с включенным определенным BHO

У меня есть плагин IE BHO, который я хочу включать только тогда, когда пользователь запускает IE из моей программы (программа запускает IE, используя CreateProcess()).

Я не хочу, чтобы этот BHO был включен, когда пользователь запускает IE из-за пределов моей программы, так как это означало бы, что любые проблемы в BHO потенциально могут испортить обычный просмотр пользователя.

Как лучше всего это сделать?

Один из способов — зарегистрировать BHO, запустить IE, а затем быстро отменить регистрацию BHO. Однако это выглядит немного запутанно, так как сбой в программе, запускающей IE, может привести к тому, что BHO останется зарегистрированным.


person watsonmw    schedule 12.05.2010    source источник
comment
Забавно, если BHO зависит от другой DLL, которой нет в пути, IE молча выгрузит BHO и продолжит работу. Это для IE7, другие версии IE могут иметь другое поведение...   -  person watsonmw    schedule 12.05.2010


Ответы (1)


Ваш подход очень подвержен ошибкам, я не советую его. Вместо этого ваш BHO должен всегда загружаться с IE, но по умолчанию он ничего не должен делать. Что вам нужно, так это способ сказать ему «начать фильтрацию» или «начать запись» или что-то еще.

У вас есть много вариантов оттуда. Самый простой — это флаг где-то в окружении (семафор, файл на диске). У вас может быть специальный URL-адрес, например mybho:start, за которым он следит.

Я делал это много раз, это работает.

Редактировать Да, BHO будет загружен в память вместе со всеми DLL, от которых он зависит (хотя вы можете подождать и загрузить их только при необходимости через LoadLibrary()).

person egrunin    schedule 12.05.2010
comment
Как и идея ожидания флага/уникального URL-адреса, но BHO по-прежнему будет загружаться в память вместе с любыми dll, от которых зависит BHO. - person watsonmw; 12.05.2010
comment
Думаю, я поработаю над рефакторингом BHO, чтобы он максимально задерживал загрузку и ограничивал количество статических инициализаций, выполняемых при загрузке. - person watsonmw; 12.05.2010