Вот оказывается есть такая мелкая проблемка — автоматическая инсталяция, так называемых, сетевых компонет совсем без использования активности пользоватея.
Озаботили тут меня этим вопросом — а я честно говоря и не знал, что это проблема... вернее, как-то раньше как-то кто-то за меня её решал
, или ещё раньше так вопрос вообще не стоял — "без активности пользователя"...
и выяснилось, что на самом деле эта проблемка имеет место быть. И в мсовских форумах и на OSR'е постоянно эти вопросы задают — "а как?". А ответов то и нет. Вернее есть но примерно такие — "а никак" или "а ручками"...
А суть самой проблемки в том, что для того чтобы сетевая компонета — Сервис, Протокол, Клиент, нормально функционировал, он должен быть "встроен" в NDIS стек. А это делается посредством "привязки" (такой старый русский термин) данного сервиса, протокола или клиента к сетевому оборудованию, к так называемому NIC'у. Эта привязка обычно описывается в INF файле, путем например указания сетевых сред и места в стеке, но подробно на том как это делеается, останавливаться не хочу, все довольно ясно расписано в документации. Можно сделать привязку и "чисто руками", и тут нет совсем ничего сложного — все делается в риестре, но все не документированно и поэтому для правильных ковбоев это не подходит. Но также есть ещё и специальный путь — с использованием INetCfg API, поищите в документации все описано. А в WDK есть даже спекиальный пример BindView — как раз постороенный на этом API и на SetupApi. И вообщем-то разработчику совсем ничего не стоит — написать программу из пять строчек... написать такой специальный инсталятор для только его компонент. Помню был даже написан некий такой "универсальный" инсталятор для
сетевых протоколов — ProtInstall, посмотрите он есть в исходниках на NDIS.COM.
Все было бы ничего, но как всегда НО — но с появленим Vista и Server 2008 и активным расшинением 64-битности теперь встал вопрос о том как делать, так чтобы разные бинарники сетевой компоненты вставали соответсвенно на разные платформы и версии. Ну вот например официально существует IA64, AND64, I386 версии Vista. Как быть? Документация описывает то как создавать мультиплатформенные INF'ы. Эта возможность существовала давно, еще в Win2000 можно было использовать так называемые декорированные имена секций, например blabka.NT или blabla.NtX86, в ХР уже стало можно ещё больше... Ну так вот, дело то в том, что примеры из WDК и соответсвенно и ProtInsrall'еры не умеют работать с такими INF файлами.
Поэтому я решил, что раз уже потребовалось мне написать инсталятор для своей собственной задачи, почему бы не написать сразу что-то универсальное, тем более, что на самом деле там нет ничего сложного. А в Server 2003 даже появилась такая специальная функция — SetupDiGetActualModelsSection которая сразу выдает имя секции модели соответсвующую платформе. Правда программа использующая такую функцию не загрузится в ранних версиях ОС.
В итоге я написал "универсальный" инсталятор для сетевых компонет, для всех версий NT и всех платформ. Он позволяет инсталировать не только протоколы но и сервисы, клиенты и пр.
Скачать можно тут :
Исходники собираются посредством BUILD.
Проект для Студии
Бинарники, лучше конечно стройте сами, но если не получается то:
32-бита платформа INTEL 32
64 бита платформа INTEL 64
64 бита платформа AMD64