Критикуешь – предлагай


Нас нередко ругают на Хабрахабре за то, что статьи недостаточно технические, а описание работы программы плохо детализировано. Но на самом деле каждый читатель понимает, что описать в одном посте абсолютно все – просто невозможно, потому что несколько лет развитие 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, разработкой которой мы заняты прямо сейчас, следующая:
  1. Модульность
  2. Многоязычность
  3. Покрытие авто-тестами
  4. Асинхронность
  5. Быстрая скорость работы


Структура папки


  • 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-файл). Плагин может полностью изменить поведение приложения.

Плагины могут

  1. Изменять события кнопок (onClick, onMouseUp, onMouseDown и т.д.)
  2. Переопределение функций
  3. Загрузка внешних JS или CSS файлов
  4. Манипуляции с DOM
  5. Манипуляции с 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)


  1. Beltoev
    07.04.2015 19:30
    -4

    Вам бы задуматься о полной переработке программы, использовав нормальный современный ЯП, а не городить и дальше костыли на этом медленном и часто вылетающим HTA.
    Теперь у меня DriverPack ассоциируется с IE, а это явно не плюс в его сторону с его и так плохой репутацией


    1. xxxTy3uKxxx
      07.04.2015 19:44

      Поэтому в своё время и появился Snappy Driver Installer


    1. ArtX Автор
      07.04.2015 20:00
      +1

      Мы об этом, естественно, думаем. И эта публикация здесь как раз для того, чтобы не в сравнения пускаться, а найти людей, готовых предложить хорошее решение существующих проблем. И, возможно, поучаствовать в их (предложений) реализации.


      1. naum
        08.04.2015 02:37
        +1

        Вам не стоит отказываться от HTML/CSS фротэнда и js-логики, просто уйдите от MSHTA в сторону node-webkit (aka nwjs), к примеру. Переход будет быстрым и безболезненным, а эффект благоприятным.


        1. ice2heart
          08.04.2015 09:14
          +1

          Можно Qt5 использовать. Там внутри нормальный CEF.


          1. naum
            08.04.2015 09:16
            +1

            Можно. Можно и C# стэк юзать с Awesomium, к примеру.


            1. ArtX Автор
              08.04.2015 10:38
              +1

              Спасибо за предложения, будем думать и рассматривать всё в отдельности.


  1. GreyCat
    07.04.2015 21:23
    +1

    Под какой лицензией распространяется то, что выложено в районе github.com/DriverPackSolution/DriverPack-Solution? Ни в README, ни где-либо в коде описания нет.

    В репозитарии гигантское количество exe-файлов — насколько я понял, большинство из них получаются в результате сборки. Зачем коммитить их в репозитарий?


    1. ArtX Автор
      07.04.2015 21:53
      +1

      Лицензия GNU GPL.
      Часть exe-файлов это свободно-распространяемые, бесплатные, сторонние утилиты к которым мы не имеем непосредственного отношения, а берём у их авторов.


      1. 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 — непонятно.


        1. ArtX Автор
          08.04.2015 13:36

          GNU GPL v.3
          По-поводу компонентов Windows, то мы являемся партнерами Microsoft по программе VIPP и проблем пока не возникало.
          .exe-файл это лаунчер запускающий HTA-программу в виде исполняемого файла. По-поводу исходников для части .exe'шников – действительно, обнаружили их отсутствие, будем восполнять.


          1. GreyCat
            08.04.2015 18:05
            +1

            Даже если вы являетесь партнерами и каким-то образом имеете особое право редистрибьютить компоненты Windows (в чем я, правда, сильно сомневаюсь) — то любой, кто захочет вам помочь и сделает форк репозитария, не обладая такими правами — автоматически нарушает соглашения Microsoft и подпадает под их санкции.

            В общем, вам надо по идее начинать с того, чтобы наводить порядок с каким-то базовым учетом — что, кто, откуда, на каких условиях распространяется и т.д. Прямо сейчас вы нарушаете дикое количество лицензий, например, включая в комплект программы wget или 7z без исходников. Или, скажем, вот эта функция явно взята отсюда и я почему-то сомневаюсь, что у вас есть договоренность с ее автором о лицензировании этой функции под GPLv3 (а если есть — то ее в любом случае, опять же, надо описать и выложить явно).


            1. ArtX Автор
              08.04.2015 18:11
              +2

              Благодарим за ваши обстоятельные комментарии – уже поняли, что необходимо наводить порядок с лицензированием.


  1. stychos
    07.04.2015 22:40

    А ещё одна из версий драйверпака без спроса устанавливала какую-то свою «следилку за обновлениями» или что-то вроде того, плохо уже помню, да и вообще, достаточно активно гадила в корне сисдиска. Было неприятно.