войти зарегистрироваться

Проектирование и рефакторингОбъектно-ориентированная разработка инсталлятора Gin

Ссылка на первую часть
Ссылка на вторую часть
Ссылка на третью часть

Ввод данных



Любой инсталлятор должен давать пользователю возможность вводить некоторые стартовый параметры, например, путь к папке, куда будет инсталлирована программа, строка подключения к базе данных, и т.д. Причем, хотелось бы, чтобы это были не просто текстовые поля, а поля, дающие возможность удобного вода данных. Если это путь установки программы, то помимо текстового поля должна быть кнопка «Browse…», если это строка подключения к БД, то пусть рядом будет кнопка для выбора или создания источника данных и т.д.

Проектирование и рефакторингОбъектно-ориентированная разработка инсталлятора Gin

Ссылка на первую часть
Ссылка на вторую часть

Контентные и контейнерные команды


Некоторые команды подразумевают работу с файлами, изначально хранимыми на компьютере разработчика пакета. Понятно, что эти файлы нужно вместе с пакетом (а желательно, прямо внутри пакета) доставить к потребителю пакета. Попробуем для начала представить себе как это будет работать.
У нас есть экземпляр класса PackageBuilder, которому при конструировании мы указываем аргумент PackageBody, содержащий в себе, помимо всего прочего, команду Command, которая представляет собой корневой узел дерева команд пакета. Метод SaveResult() экземпляра класса PackageBuilder должен рекурсивно обойти все дерево, и для тех команд, которые используют контентные файлы, расположенные на компьютере разработчика, включить в тело пакета содержимое всех этих файлов. В тело пакета он также должен включить xml-файл, в который будет сериализован сам PackageBody с полным описанием пакета и выполняемых им команд.

Проектирование и рефакторингОбъектно-ориентированная разработка инсталлятора Gin

Ссылка на первую часть

Транзакции.


Напомню, что я собирался реализовать механизм транзакций, позволяющий откатывать блоки операций при возникновении ошибки внутри блока, защищенного транзакцией. Сначала надо решить вопрос с ответственностью за сохранение состояния и за откат операции. Скажу сразу, что архитектура, которую я приведу ниже вырисовалась у меня не сразу, а только после нескольких попыток проектирования и реализации макета, пока у меня не получилось то, что получилось.
Для того, чтобы архитектура транзакций была легко наращиваемой, воспользуемся как и ранее наследованием. При этом возложим ответственность за сохранение состояние и откат к сохраненному состоянию на саму команду. Учтем при этом, что не все команды являются по сути транзакционными. Например, чтение из реестра не может быть частью транзакции, потому что оно ничего не изменяет в системе. А вот запись в реестр – это уже часть транзакции. И создание файла – это часть транзакции.
А поэтому объявим еще один абстрактный класс TransactionalCommand, унаследуем его от класса Command.

Проектирование и рефакторингОбъектно-ориентированная разработка инсталлятора Gin из песочницы

Введение


У предлагаемого вашему вниманию цикла статей есть несколько основных целей:
  1. Создать полезное программное обеспечение – инсталлятор программ и обновлений.
  2. Показать преимущества объектно-ориентированного подхода к разработке ПО и научить создавать легко расширяемые программные архитектуры.

В данном цикле статей я хочу поделиться историей создания программного обеспечения, позволяющего производить установку и обновление программных продуктов компании при помощи пакетов. Необходимость создания собственного инсталлятора(с отказом от использования готовых решений) вызвана специфичностью требований к инсталлятору. Я не буду углубляться в обоснование необходимости разработки, так как тема цикла статей другая.
Основными требованиями к разрабатываемой архитектуре будут:
  1. Реализация механизма транзакций, причем транзакции могут включать в себя не только SQL-транзакции, но и файловые, а также транзакции, связанные с изменением любых других ресурсов ОС, таких как записи в реестре, изменения конфигурационных файлов и т.д.
  2. Расширяемость операционной базы инсталлятора, то есть, добавление новых типов команд(операций), как с поддержкой транзакций, так и без нее.

Блог компании SymantecDuqu: 0day + инсталлятор

В предыдущем посте мы уже вкратце рассказали о весьма изощренном трояне Duqu, ворующем конфиденциальную информацию компаний и самоуничтожающемся после завершения работы. На что мы получили 2 заявки
1. найти инсталляционный файл
2. найти уязвимость нулевого дня

Итак, концерт по заявкам:

image
Схема инфицирования Duqu

OracleКаким должен быть инсталлятор. Мастер-класс от Oracle


Театр начинается с вешалки, а программный продукт начинается с инсталлятора. Все мы хоть раз устанавливали программу и знаем, что часто по тому, как сделана программа установки, можно судить об отношении разработчиков ко всему программному продукту.
Также все наслышаны о таком «монстре», «корпорации зла», которая покупает Sun, судится с Google и т.д. Это Oracle Corporation, в которой работает более 100 тыс. сотрудников.
По роду моей деятельности мне пришлось столкнуться с флагманской СУБД данной компании – Oracle Database 11g Release 2.
До этого мое общение с этой СУБД замерло на версии 9i и теперь, хоть и избалованный другой известной СУБД, я решил насладиться инженерной мыслью Oracle Corporation.

Ниже вы ознакомитесь с моими первыми впечатлениями.

Персональные блоги Вы ищете программу заданной функциональности. Функциональность специфическая, нужна редко.

Проголосовало 370 человек. Воздержалось 79 человек.

GoogleОфлайновый дистрибутив Google Earth

Скачать Google Earth — не такая уж простая задача. Особенно, если вы хотите получить полный дистрибутив, и при этом избежать дополнительных «бонусов» от Google. По умолчанию Google выдаёт маленький веб-инсталлятор, который скачивает Google Earth, Google Chrome и Google Updater. Даже если в опциях вы снимите птичку ″Include Google Chrome, a fast new browser for Windows and Mac″, то всё равно получите веб-инсталлятор.

Персональные блоги Баги в инсталляторах. А где их нет?

Недавно на хабре была статья про баг установщика Adobe. Эта статья меня задела тем, что автор сославшись на баг делает вывод о том, что даже такие большие и известные компании как Adobe «забывают, порой, об удобстве установки.» и могут «написать колосальной сложности и объема программы, но сэкономить на динамическом определении пути установки, реализация которого под силу даже студенту». Тут мне показалось что это камень в огород разработчиков инсталлятора Adobe. Поэтому я решил написать ответный пост и рассмотреть инсталляторы, их цену и пару багов. К Adobe отношения не имею.

UPD: Добавил картинку о трудностях локализации ))

РазработкаУстановщик Adobe требует от своих пользователей знания SQLite

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

Помните — человека встречают по одежке, книгу — по обложке, а программу — по инсталлятору. Удобство установки, переустановки и удаления программы не менее важно чем удобство ее использования.



Так вот, оказывается, что множество людей сталкиваются с одной и той же ошибкой, переустанавливая продукты Adobe:
«Введите (название продукта) чтобы продолжить установку».

Возникает она когда путь до папки с установочными файлами не совпадает с путем, который использовался первоначально.
Google полон вопросов на эту тему, но, увы, не богат ответами.

А ответ, между тем, столь необычен, что более чем заслуживает внимания.