Эволюция инсталляторов

в 13:36, , рубрики: inno setup, install, portable, windows, wix, Блог компании Фаматек, разработка, метки: , , , ,

Эволюция инсталляторов
Товар в красивой упаковке проще продавать. А программу в хорошем инсталляторе?

Ведь не факт, что инсталлятор — аналог упаковки. Это скорее процесс вынимания продукта из коробки. Много раз нажать «Next», в самом конце — «Finish», и никакого там аккуратного развязывания ленточек. Порвали слюду, небрежно вскрыли коробку — «Что там у нас внутри?»

Сама коробка не представляет особой ценности. Для некоторых товаров специально делают бюджетную упаковку. Зато важно, чтобы процесс был предсказуемым. Если инсталлятор предсказуем, то его внешний вид и возможности не имеют значения. Но когда что-то пойдёт «не так», или пользователю вдруг не хватит стандартных опций, всплывут все недостатки — как внешнего вида, так и возможностей.

Чего хотят от инсталляторов

Корпоративному пользователю, например, будет интересно узнать, как поставить программу в silent режиме, и какие у инсталлятора имеются ключи командной строки. Поддержка стандартного для Windows msi-файла инсталлятора тут окажется как нельзя кстати.

Если инсталлятор задаёт сложные вопросы, важно, чтобы они были на языке, понятном пользователю. Угадать этот язык сразу — та ещё проблема. Язык интерфейса операционной системы не всегда будет правильным выбором. Поэтому предоставление возможности выбора языка является неотъемлемой частью современных инсталляторов.

Раньше мы уже писали о том, как можно реализовать выбор языка и сделать «настоящий» msi. Мы научились ценить традиции разных языковых культур и уважать строгие корпоративные требования. Но всё ли учтено? Ведь кто-то вместо инсталлятора захочет сразу иметь portable-версию программы. А пользователи, работающие под учетной записью с ограниченными правами? Многие программы они просто не могут поставить, не позвав администратора. И не всегда это ошибка администратора, чаще — разработчика.

Инсталляторы «два в одном»

Сразу после запуска инсталлятора, можно предлагать не только установить программу, но и запустить её без установки. Такая программа может хранить файлы настроек и данные пользователя в одной папке с инсталлятором, выступая одновременно и инсталлятором, и portable-версией. А для распаковки программы из msi, всегда можно использовать административную установку — мало кто знает, что она создавалась как раз для этой цели. Надо только не забыть удалить временные файлы по завершении работы программы.

Такой подход избавляет от необходимости переделывать концепцию огромной зелёной кнопки «Скачать» на сайте, т.к. одного файла будет достаточно тем, кто хочет программу установить — и тем, кто хочет ее запустить только один раз, и даже тем, кто хочет носить ее с собой на флешке. Несложно научить программу работать с заданным файлом настроек и хранить пользовательские данные по заданному пути. Важно не трогать реестр, а в случае интеграции с другими программами — предусмотреть поддержку относительных путей. И не стоит забывать, что файл инсталлятора внезапно может оказаться на компакт-диске :-).

Ограниченные права учетной записи

Домашние пользователи, а также сотрудники компаний, в которых работают добрые системные администраторы, с такой проблемой не сталкиваются. Разработчики, впрочем, тоже. Работая на своих компьютерах с неограниченными правами, мы часто забываем о поддержке пользователей с ограниченными возможностями правами.

Дело в том, что в Windows Installer имеется два способа установки программы — для всех пользователей системы (самый распространённый), и для текущего пользователя, запустившего инсталлятор. Причём в корпоративном мире не редкость, когда у текущего пользователя недостаточно привилегий для установки программы в режиме «для всех пользователей».

Чтобы сделать инсталлятор, поддерживающий оба способа установки, и без проблем работающий на Windows Vista (в Windows 7 добавили поддержку т.н. «Single Package Authoring»), разработчику необходимо предпринимать специальные действия.

А именно, каждый раз, перед запуском установки «для текущего пользователя» патчить msi-файл инсталлятора, устанавливая в «1» третий бит специального свойства «Word Count» в так называемом «Summary Information Stream» (который является неотъемлемой частью msi-файла). Для этого можно использовать функцию MsiSummaryInfoSetProperty(). Если msi-файл имеет цифровую подпись, то при установке в режиме «для всех пользователей» будет «синее» окошко UAC. При установке же в режиме «для текущего пользователя» факт испорченной цифровой подписи на UAC не влияет, поэтому такой подход прекрасно работает.

Если же не использовать описанные выше шаманские танцы с бубном для Windows Vista, а просто установить третий бит в «1» во время сборки msi, то даже системный администратор не сможет установить такой msi в режиме «для всех пользователей» :-). И наоборот, если третий бит не ставить, то будет выводиться окошко UAC, а в худшем случае требоваться пароль администратора.

Как упаковать?

Для реализации перечисленных возможностей нужен exe-файл инсталлятора. В него уже упаковывается msi-файл. Движок пользовательского интерфейса также желательно выносить в exe, чтобы обеспечить не только переключение языка установки «на лету», но и выбор опций ещё до запуска msi-установки. Важно не забыть про взаимодействие с системой Windows Installer, обеспечить корректное обнаружение уже установленной версии и поддержку удаления. Корпоративный заказчик получает тот же msi-файл, что и упакованный в exe — ему не нужна поддержка ни portable-режима, ни установки для текущего пользователя, а язык указывается в командной строке.

Чтобы разработать такой exe-инсталлятор, необходим опыт в разработке пользовательских интерфейсов, либо возможность использовать подходящий «фреймворк». Но вне зависиости от выбранных инструментов, понадобится глубокое знание WinAPI и API Windows Installer.

И попробовать

Бета-версия бесплатного Advanced IP Scanner, нашего маленького полигона по обкатыванию новых технологий на людях, обзавелась новым инсталлятором, который на деле реализует большую часть описываемых возможностей. И запуск без установки, и смена языка, и msi-файл внутри — всё в нём есть. Рекомендуется качать, смотреть и изучать. :-)

Для выбора языка, отображения диалогов и запуска portable-версии мы использовали Inno Setup. Начинка (msi) осталась прежней, на WiX, только теперь без диалогов.

Всем отважившимся увидеть живой инсталлятор «всё-в-одном» и принять участие в бета-тестировании, необходимо:

  1. Скачать Advanced IP Scanner 2.3.226 beta.
  2. Ознакомиться с продуктом.
  3. Проверить его совместимость с вашей ОС.
  4. Прислать нам баг-репорт и/или пожелания по улучшению через специальную форму на странице бета-тестирования.

Каждый бета-тестер получит бессрочную лицензию на Radmin 3.

Заранее благодарим за ваше участие. Вопросы разработчикам и комментарии приветствуются!

Автор: avesus

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js