Критикуешь – предлагай
Нас нередко ругают на Хабрахабре за то, что статьи недостаточно технические, а описание работы программы плохо детализировано. Но на самом деле каждый читатель понимает, что описать в одном посте абсолютно все – просто невозможно, потому что несколько лет развитие DRP шло во множестве направлений.
Часть из них связана непосредственно с исполняемым файлом, пресловутым .exe'шником; другая – с созданием архива и, что немаловажно, индекса драйверов; третья – с тестированием приложения и отдельных версий драйверов для различного оборудования как на разных версиях ОС Windows, так и на железных стойках. Часть из этих решений мы отдаем в тестирование пользователям, проявившим особенный интерес.
Предлагаешь – делай
Поэтому мы решили пригласить всех желающих принять участие в непосредственной разработке windows-приложения DRP, ведь всегда проще взглянуть на код, к тому же мы принимаем всю полезную помощь в создании наиболее удобного для пользователя приложения для установки и обновления драйверов.
GitHub-репозиторий доступен любому и мы будем рады вашему предметному интересу, багрепортам и любым возможным улучшениям программы.
У нас есть ряд проблем, которые мы сможем решить вместе с опытными web-разработчиками:
— Unit-тесты ПО. У нас уже есть небольшие наработки по тестированию оборудования и автоматическое тестирование в виртуальной лаборатории (на базе Azure).
— Документация. Мы до сих пор не придумали, при помощи чего генерировать документы.
— А также будущие фичи для приложения и их реализация.
Введение
DriverPack Solution написан на языке HTA (HTML Application), поэтому программный код исполняется движком Internet Explorer (процесс mshta.exe), являющимся стандартным на всех версиях Windows. Его описание находится по следующему адресу.
В DRP используются популярные js- и html-фреймворки, такие как: jQuery Tools, Bootstrap и др. Используемая сейчас нами база-данных: SQLite
Да, HTA – проблема. В нём хватает недостатков, однако его преимущества также очевидны:
- Взаимосвязь между фронт- и бэк-эндом
- Скриптовый язык, простое редактирование
- Доступ к реестру и файловой системе
- Использование Javascript UI-библиотек
- Отсутствие компиляции
Краткое описание
HTA не является объектом для ограничений безопасности, накладываемых на Web-страницы, а выполняется также, как любой исполняемый файл. HTA-программы не могут быть «подписаны», однако могут быть установлены из различных инсталляционных форматов.
HTA выглядит как полноценное Windows-приложение, поэтому привычно для любого пользователя и объединяет в себе все возможности браузера Explorer: объектную модель, HTML, каскадные листы стилей, скрипты и события, а также специфическую функциональность HTA.
Концепция DRP 16, разработкой которой мы заняты прямо сейчас, следующая:
- Модульность
- Многоязычность
- Покрытие авто-тестами
- Асинхронность
- Быстрая скорость работы
Структура папки
- Drivers\ – драйверпаки (7zip архивы драйверов);
- Indexes\ – индексные файлы, для быстрого поиска по базе драйверов;
- Soft\ – софт для автоматической установки;
- DriverPackSolution.exe – Launcher, передает управление файлу DriverPackSolution.html;
- \bin\DriverPackSolution.html – главный исполняемый файл
- \bin\Tools – папка с JS-скриптами, плагинами и exe-приложениями;
Основные модули
Модуль dpinst
Driver Package Installer (DPInst), являясь одним из компонентов DIFX, позволяет производить установку пакетов драйверов для тех устройств, которые еще не были установлены в компьютере («инициализационная установка»).
DPInst также автоматически обновляет драйверы для всех установленных устройств, которые поддерживаются установленными пакетами драйверов.
Модуль devcon
DevCon — это программа с интерфейсом командной строки, которая используется в качестве альтернативы диспетчеру устройств. С её помощью можно: включать, выключать, перезапускать, обновлять, удалять и опрашивать отдельные устройства или группы устройств.
Программа DevCon также предоставляет необходимые разработчику драйвера сведения, которые недоступны с помощью диспетчера устройств. Используется пользователями, которым удобнее работать с командной строкой.
Модуль позволяет как напрямую работать с программой и драйверами, так и использовать список идентификаторов для распространенных классов устройств, который актуален в случае, если нет доступа к самому устройству.
Модуль mshta
Модуль предназначен для работы с файлами *.HTA.
Если для корректной работы системы требуется использование этого модуля, стоит отметить, что интеграция программы и модуля mshta настроены таким образом, чтобы не снижать производительность всей системы в целом, в первую очередь.
Плагины
Чтобы не вносить изменений в общий код программы, можно создать отдельный плагин (js-файл). Плагин может полностью изменить поведение приложения.
Плагины могут
- Изменять события кнопок (onClick, onMouseUp, onMouseDown и т.д.)
- Переопределение функций
- Загрузка внешних JS или CSS файлов
- Манипуляции с DOM
- Манипуляции с CSS
Способы внедрить плагин
Локальная работа плагина
Разместите js-плагин в папке bin\tools\modules и подключите в DriverPackSolution.html
Online плагин
Если при запуске есть подключение к сети, можно подключить новый плагин и менять логику программы, даже в самых старых версиях DRP.
По вопросу размещения плагинов обращайтесь напрямую ко мне.
Beta-Online плагин
DRP с названием версии Beta подгружает Offline версию файла bin\tools\update.js. Для загрузки вашего плагина добавьте в этот файл функцию: inc("<путь до вашего плагина>");
Важно чтобы каждый плагин который модифицирует интерфейс DRP поддерживал многоязычность.
Главный принцип написания плагина: сначала пишем сценарий авто-теста, только потом сам код. Авто-тесты выполняются из скрипта: tools/modules/tests/RunTests.hta
DRP изначально разрабатывался без автоматического тестирования и использования объектов, из-за чего теперь сильно страдает, а мы заняты внесением масштабных изменений в исходный код приложения.
Любые возможные вопросы и предложения – в комментариях или личных сообщениях. Если вы настроены всерьез, мы также рекомендуем просмотреть вебинар по DRP 16-версии.
Комментарии (15)
GreyCat
07.04.2015 21:23+1Под какой лицензией распространяется то, что выложено в районе github.com/DriverPackSolution/DriverPack-Solution? Ни в README, ни где-либо в коде описания нет.
В репозитарии гигантское количество exe-файлов — насколько я понял, большинство из них получаются в результате сборки. Зачем коммитить их в репозитарий?ArtX Автор
07.04.2015 21:53+1Лицензия GNU GPL.
Часть exe-файлов это свободно-распространяемые, бесплатные, сторонние утилиты к которым мы не имеем непосредственного отношения, а берём у их авторов.GreyCat
07.04.2015 22:25+4А версия какая — GNU GPL v2, v2+, v3?
Посмотрел немножко внимательнее, там на самом деле все довольно странно. Например:
- bin/Tools/cmd64.exe — судя по подписям, это Windows Command Processor, взятый из win7sp1_rtm.101119-1850, © Microsoft Corporation. All rights reserved. У меня стойкое подозрение, что это распространять вообще нельзя, не то, что распространять свободно.
- bin/Tools/mshta.exe — опять же, "© Microsoft Corporation. All rights reserved", но на этот раз не из win7sp1, а из xpsp_sp2_rtm 040803-2158.
- bin/Tools/CPUz/*.exe — это CPU-z, который хоть и freeware, но совсем не redistributable.
Исходники для части exe-шников в целом не нашел — например, из чего собирается и что именно делает DriverPackSolution.exe — непонятно.ArtX Автор
08.04.2015 13:36GNU GPL v.3
По-поводу компонентов Windows, то мы являемся партнерами Microsoft по программе VIPP и проблем пока не возникало.
.exe-файл это лаунчер запускающий HTA-программу в виде исполняемого файла. По-поводу исходников для части .exe'шников – действительно, обнаружили их отсутствие, будем восполнять.GreyCat
08.04.2015 18:05+1Даже если вы являетесь партнерами и каким-то образом имеете особое право редистрибьютить компоненты Windows (в чем я, правда, сильно сомневаюсь) — то любой, кто захочет вам помочь и сделает форк репозитария, не обладая такими правами — автоматически нарушает соглашения Microsoft и подпадает под их санкции.
В общем, вам надо по идее начинать с того, чтобы наводить порядок с каким-то базовым учетом — что, кто, откуда, на каких условиях распространяется и т.д. Прямо сейчас вы нарушаете дикое количество лицензий, например, включая в комплект программы wget или 7z без исходников. Или, скажем, вот эта функция явно взята отсюда и я почему-то сомневаюсь, что у вас есть договоренность с ее автором о лицензировании этой функции под GPLv3 (а если есть — то ее в любом случае, опять же, надо описать и выложить явно).ArtX Автор
08.04.2015 18:11+2Благодарим за ваши обстоятельные комментарии – уже поняли, что необходимо наводить порядок с лицензированием.
stychos
07.04.2015 22:40А ещё одна из версий драйверпака без спроса устанавливала какую-то свою «следилку за обновлениями» или что-то вроде того, плохо уже помню, да и вообще, достаточно активно гадила в корне сисдиска. Было неприятно.
Beltoev
Вам бы задуматься о полной переработке программы, использовав нормальный современный ЯП, а не городить и дальше костыли на этом медленном и часто вылетающим HTA.
Теперь у меня DriverPack ассоциируется с IE, а это явно не плюс в его сторону с его и так плохой репутацией
xxxTy3uKxxx
Поэтому в своё время и появился Snappy Driver Installer
ArtX Автор
Мы об этом, естественно, думаем. И эта публикация здесь как раз для того, чтобы не в сравнения пускаться, а найти людей, готовых предложить хорошее решение существующих проблем. И, возможно, поучаствовать в их (предложений) реализации.
naum
Вам не стоит отказываться от HTML/CSS фротэнда и js-логики, просто уйдите от MSHTA в сторону node-webkit (aka nwjs), к примеру. Переход будет быстрым и безболезненным, а эффект благоприятным.
ice2heart
Можно Qt5 использовать. Там внутри нормальный CEF.
naum
Можно. Можно и C# стэк юзать с Awesomium, к примеру.
ArtX Автор
Спасибо за предложения, будем думать и рассматривать всё в отдельности.