Есть dll, в которой живут Explorer bar и ToolBand. Хочется, чтобы при заходе на страничку (или при нажатии кнопочки на ней --- без разницы) выскакивало предложение это установить. При положительном ответе надо, собственно, скачать dll-ку и зарегить ее.
Вопрос: как это делается. Ищется где почитать. Рабочие примеры приветствуются.
Здравствуйте, shurik13, Вы писали:
S> Есть dll, в которой живут Explorer bar и ToolBand. Хочется, чтобы при заходе на страничку (или при нажатии кнопочки на ней --- без разницы) выскакивало предложение это установить. При положительном ответе надо, собственно, скачать dll-ку и зарегить ее. S> Вопрос: как это делается. Ищется где почитать. Рабочие примеры приветствуются.
В общем всё как всегда просто. На страничку вставляешь тэг OBJECT в параметре codebase адрес твоего CAB файла. CAB файл надо перед этим сделать, при этом туда надо запихнуть не большой inf файл. Потом этот CAB файл надо подписать при помощи sigcode.exe (Она входит в PlatformSDK). И всё
Пример инф файла
[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
MRDDL.dll=MRDDL.dll
[MRDDL.dll]
file-win32-x86=thiscab
clsid={031C4995-C4BC-438A-B700-F5EC0B425AE8}
FileVersion=1,0,0,447
RegisterServer=yes
; end of INF file
S>> Есть dll, в которой живут Explorer bar и ToolBand. Хочется, чтобы при заходе на страничку (или при нажатии кнопочки на ней --- без разницы) выскакивало предложение это установить. При положительном ответе надо, собственно, скачать dll-ку и зарегить ее. S>> Вопрос: как это делается. Ищется где почитать. Рабочие примеры приветствуются. Tom>В общем всё как всегда просто. На страничку вставляешь тэг OBJECT в параметре codebase адрес твоего CAB файла. CAB файл надо перед этим сделать, при этом туда надо запихнуть не большой inf файл. Потом этот CAB файл надо подписать при помощи sigcode.exe (Она входит в PlatformSDK). И всё
Спасибо. А как сделать cab-файл? Я раньше с задачей инсталяторов не сталкивался. Может, прога есть какая-нибудь?
Tom>... Потом этот CAB файл надо подписать при помощи sigcode.exe (Она входит в PlatformSDK).
А для этого надо где-то зарегистрировать эту подпись? Или ее чем-нибудь сгенерировать можно?
У меня при запуске signcode был затребован файл с подписью...
Здравствуйте, shurik13, Вы писали:
Tom>>... Потом этот CAB файл надо подписать при помощи sigcode.exe (Она входит в PlatformSDK).
S> А для этого надо где-то зарегистрировать эту подпись? Или ее чем-нибудь сгенерировать можно? S> У меня при запуске signcode был затребован файл с подписью...
Вообще подписываю файлы при помощи сертификатов за которые между прочим деньги надо платить, но в PlatformSDK или в MSVC входит тестовый сетификат. Можешь подписать при помощи его.
Попробовл. Что-то не срабатывает.
А что в html писать-то? Пробовал (на локальной машине) так:
<object ID="MyControl"
CLASSID="clsid:031C4995-C4BC-438A-B700-F5EC0B425AE8"
CODEBASE="file:///c:\bandobjs.cab"
</object>
?
Здравствуйте, shurik13, Вы писали:
Tom>>В общем всё как всегда просто.
S> Попробовл. Что-то не срабатывает. S> А что в html писать-то? Пробовал (на локальной машине) так: S> <object ID="MyControl" S> CLASSID="clsid:031C4995-C4BC-438A-B700-F5EC0B425AE8" S> CODEBASE="file:///c:\bandobjs.cab" S> </object> S> ?
Если обьект уже зарегестрирован, то естесственно ничего заново ставиться не будет. Что бы ставилось на странице ещё нужно указать минимальную версию. Это нужно для автоматического контроля версий. Т.е если обьект зарегестрирован, но зарегестрирована версия меньше, чем минимальная на странице, то обьект будет закачен и зарегестрирован. Вот пример из реального работающего обьекта.
S>> А что в html писать-то? Пробовал (на локальной машине) так: S>> <object ID="MyControl" S>> CLASSID="clsid:031C4995-C4BC-438A-B700-F5EC0B425AE8" S>> CODEBASE="file:///c:\bandobjs.cab" S>> </object> S>> ?
Tom>Если обьект уже зарегестрирован, то естесственно ничего заново ставиться не будет.
Не зарегистрирован. Точно.
Tom>Что бы ставилось на странице ещё нужно указать минимальную версию. Это нужно для автоматического контроля версий. Т.е если обьект зарегестрирован, но зарегестрирована версия меньше, чем минимальная на странице, то обьект будет закачен и зарегестрирован. Вот пример из реального работающего обьекта. Tom>PS: У тебя первый тэг кстате не закрыт. Это описка ? Или ошибка ?
Закрыл и поставил версию --- не помогло.
А эксплорер ведет что-нибудь вроде errorlog? А то даже непонятно, куда сунуться: просто не срабатывает, и все.
S>Закрыл и поставил версию --- не помогло. S>А эксплорер ведет что-нибудь вроде errorlog? А то даже непонятно, куда сунуться: просто не срабатывает, и все.
Ну что сказать. Геморой программистам не страшен . Проверяй инф файл. Проверяй путь (у тебя там кстате 3 слэша). Попробуй закрывающий тэг вообще убрать. Я думаю проблемма в какой нибудь глупости. У меня вроде работало сразу...
Tom>Ну что сказать. Геморой программистам не страшен . Проверяй инф файл. Проверяй путь (у тебя там кстате 3 слэша). Попробуй закрывающий тэг вообще убрать. Я думаю проблемма в какой нибудь глупости. У меня вроде работало сразу...
В общем так. Выложил все это хозяйство на сервер, чтобы с путями не мучаться. При заходе на страничку она видит, предлагает установить. Говорю Да. Она чуть трещит и говорит Готово. Но ничего не ставит. В чем трабл?
Файл bandobjs.dll содержит toolband и Explorer bar.
Файл bandobjs.inf:
[version]
; version signature (same for both NT and Win95) do not remove
signature="Shurik"
AdvancedINF=2.0
[Add.Code]
BANDOBJS.dll=BANDOBJS.dll
[MRDDL.dll]
file-win32-x86=thiscab
clsid={031C4995-C4BC-438A-B700-F5EC0B425AE8}
FileVersion=1,0,0,447
RegisterServer=yes
; end of INF file
Файл bandobjs.cab содержит указанные выше два файла.
И все это вызывается со странички a.html:
Здравствуйте, shurik13, Вы писали:
Tom>>Ну что сказать. Геморой программистам не страшен . Проверяй инф файл. Проверяй путь (у тебя там кстате 3 слэша). Попробуй закрывающий тэг вообще убрать. Я думаю проблемма в какой нибудь глупости. У меня вроде работало сразу...
S> В общем так. Выложил все это хозяйство на сервер, чтобы с путями не мучаться. При заходе на страничку она видит, предлагает установить. Говорю Да. Она чуть трещит и говорит Готово. Но ничего не ставит. В чем трабл?
S>Файл bandobjs.dll содержит toolband и Explorer bar. S>Файл bandobjs.inf: S>
S>[version]
S>; version signature (same for both NT and Win95) do not remove
S>signature="Shurik"
S>AdvancedINF=2.0
S>[Add.Code]
S>BANDOBJS.dll=BANDOBJS.dll
S>[MRDDL.dll]
S>file-win32-x86=thiscab
S>clsid={031C4995-C4BC-438A-B700-F5EC0B425AE8}
S>FileVersion=1,0,0,447
S>RegisterServer=yes
S>; end of INF file
S>
S>Файл bandobjs.cab содержит указанные выше два файла. S>И все это вызывается со странички a.html: S>
S>> В общем так. Выложил все это хозяйство на сервер, чтобы с путями не мучаться. При заходе на страничку она видит, предлагает установить. Говорю Да. Она чуть трещит и говорит Готово. Но ничего не ставит. В чем трабл?
Tom>Проблемма в том, что: Tom>1. У тебя секция называется MRDDL.dll а надо BANDOBJS.dll
А я думал, это просто комментарий такой
Эх, статеечку бы про все это, вместо того, чтобы заваливать форум ламерскими вопросами. Никто не подскажет?
Tom>2. У тебя версия ...447 — это правильно, а то уж очень на мою похоже
Я еще CLSID везде на свой сменил. В первом приближении заработало. Но:
1. После регистрации соответствующий тулбар появляется только после перезапуска эксплорера. В том числе и соответствующий пункт меню по его отображению. Можно ли сделать так, чтобы он становился доступным сразу, без перезапуска?
2. Версия действительно не та. Он из-за этого переставляться пытается каждый раз. Вопрос: где посмотреть нужное значение версии? Я перерыл в Visual Studio все свойства проекта --- но не нашел. Сунулся в реестр, но и там меня ждала неудача. Плохо искал?
S> Эх, статеечку бы про все это, вместо того, чтобы заваливать форум ламерскими вопросами. Никто не подскажет?
Ну так давай напиши. Народ посмотрит подправит и будет кул
Tom>>2. У тебя версия ...447 — это правильно, а то уж очень на мою похоже
S> Я еще CLSID везде на свой сменил. В первом приближении заработало. Но: S> 1. После регистрации соответствующий тулбар появляется только после перезапуска эксплорера. В том числе и соответствующий пункт меню по его отображению. Можно ли сделать так, чтобы он становился доступным сразу, без перезапуска?
Думаю, что это не возможно.
S> 2. Версия действительно не та. Он из-за этого переставляться пытается каждый раз. Вопрос: где посмотреть нужное значение версии? Я перерыл в Visual Studio все свойства проекта --- но не нашел. Сунулся в реестр, но и там меня ждала неудача. Плохо искал?
В проекте должен быть ресурс специальный, который содержит информацию о версии. Если его нет, то можно просто добавить.
Здравствуйте, Tom, Вы писали:
S>> Эх, статеечку бы про все это, вместо того, чтобы заваливать форум ламерскими вопросами. Никто не подскажет? Tom>Ну так давай напиши. Народ посмотрит подправит и будет кул
Можно попробовать. Хотя получится что-то в стиле "я написал так и почти заработало"
Tom>>>2. У тебя версия ...447 — это правильно, а то уж очень на мою похоже
S>> 2. Версия действительно не та. Он из-за этого переставляться пытается каждый раз. Вопрос: где посмотреть нужное значение версии? Я перерыл в Visual Studio все свойства проекта --- но не нашел. Сунулся в реестр, но и там меня ждала неудача. Плохо искал? Tom>В проекте должен быть ресурс специальный, который содержит информацию о версии. Если его нет, то можно просто добавить.
А как он выглядит? Просто что-нибудь типа #define Version ... ?
S> Можно попробовать. Хотя получится что-то в стиле "я написал так и почти заработало"
Это и надо. Тебе наверное даже красненькую штучку дадут, что мол особо отличившийся. S>А как он выглядит? Просто что-нибудь типа #define Version ... ?
Лентяй ты. Вот что я тебе скажу. Возьми сгенери простой MFC екзешник стандартным визардом. Перейди на закладку Resources и там будет ресурс Version.
PS: Я надеюсь ты на MSVC++ пишешь а не на BCB, а то там наверное всё подругому.
Здравствуйте, Tom, Вы писали:
S>> 1. После регистрации соответствующий тулбар появляется только после перезапуска эксплорера. В том числе и соответствующий пункт меню по его отображению. Можно ли сделать так, чтобы он становился доступным сразу, без перезапуска? Tom>Думаю, что это не возможно.
Нет, если речь идёт о тулбаре, то возможно. Сам недавно столкнулся с такой проблемой. Единственная сложность, с которой придется столкнуться — это получение указателя на IWebBrowser2 запущенного экземпляра. После это надо попросить его сделать ShowBrowserBar для твоего компонента. Тулбарчик появится.
Можно сделать несколько иначе — при регистрации библиотеки запустить новый экземпляр эксплорера и в нем включить тулбар (тут проблем с получением указателя на IWebBrowser2 уже не должно возникнуть). А заодно направить браузер на страничку, где попросить юзера закрыть старое окошко.
Пример можно посмотреть на французком сайте здесь
А вот если речь идёт о BHO, тогда без перезапуска не обойтись...
Здравствуйте, Tom, Вы писали:
Tom>Вообще подписываю файлы при помощи сертификатов за которые между прочим деньги надо платить, но в PlatformSDK или в MSVC входит тестовый сетификат. Можешь подписать при помощи его.
А не могли бы вы подробнее рассказать как получить этом сертификат за деньги, что для этого нужно и где вообще можно про это почитать. Какие конторы вообще этим занимаются? Я читал материалы по этой теме на сайте www.verisign.com, но там они предлагают получить только сертификат самой крутой категории за 400$ с кучей гемороя в виде формальностей...
Однако, если я не ошибаюсь, можно обойтись меньшей кровью и меньшими деньгами