Pull to refresh

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

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

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

Из личного опыта.


Переносили InstallSHield 12 с одной машины на другую. Дело в том, что активация/деактивация InstallSHield 12 производится через интернет, следует отметить, что дективация производиться в автоматическом режиме. Переустановка затянулась на месяц, так как не могли активировать InstallShield на новой машине, получали ошибку что ключ уже используется на другой.

Переписка с сапортом InstallShield'a длилась до тех пор пока американский коллега с использованием грубой лексики не попросил их исправить ситуацию в нашу пользу. Во время переписки пришла красивая брошюрка с картинками, в которой было написано что-то вроде: проблемы с переносом InstallShield'a? Купите новую лицензию с более гибкими настройками!
И кто виноват в том что деинсталлятор криво работает? Разработчик?

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

Мультиплатформенные и нативные.



Для краткости буду называть программы для создания инсталляторов «IDE», хотя это не самое лучшее название. Можно разделить IDE на два типа мультиплатформенные и нативные.

Мультиплатформенные — один проект для нескольких платформ. Это такие IDE как InstallAnywhere, InstallBuilder, InstallShield Multiplatform, Install4j. В таблице 1 указаны цены.

InstallAnywhere 2009 Enterprise/Standard Edition $4,499.00/$1,999.00 shop.flexerasoftware.com/product/fullproducts.asp
InstallBuilder Enterprise/Professional $1,995/ $1,395 installbuilder.bitrock.com/purchase.html
InstallShield Multiplatform - Снят с производства.
Install4j Standard License $1199 www.ej-technologies.com/buy/install4j/single?currency=USD


Нативные — один проект для одного семейства платформ. Чаще всего они написаны для семейства Windows. Например, InstallShield 2010, InnoSetup, InstallAware и д.р. В таблице 2 указаны цены.

InstallShield 2010 Professional/Premier $1,999.00/$3,999.00 shop.flexerasoftware.com/product/fullproducts.asp
Inno Setup free www.jrsoftware.org/isinfo.php
InstallAvare Developer/Studio Admin $1499/$2999 www.cleverbridge.com/client/185/index.html?studio


Надо ли говорить, что бесплатные и платные версии IDE отличаются как небо и земля. Хотя это нисколько не умоляет трудов разработчиков ни тех ни других.
Из цен можно заключить, что инсталляторы обходятся не дешево. Уверен, что в разы дороже будет писать свое IDE и на его основе делать инсталлятор.

Баги инсталяторов.



Начнем с Windows.
1. в большинстве своем (и в случае Adobe) инсталлятроы для Windows делаются на основе Windows Installer (.msi), у него как и у любого другого продукта есть свои баги.
2. при разработке инсталлятора используется IDE, у него как и у любого другого продукта есть свои баги.
3. инсталятор делает человек и он точно где-нибудь оставит пару багов. Каюсь, не раз так делал…
4. есть лицензии, а это очень важный вопрос! Конечно не для всех :)
Аналогичная ситуация для мультиплатформенных инсталляторов.
Как видно, не все баги в инсталляторах говорят о разработчике.

Рассмотрим для примера пару багов InstallAnywhere 2008, так как сейчас работаю с ним. У меня Enterprise версия она стоит около $4500.
Это IDE для создания инсталляторов Java проектов. Радует то, что при разработке инсталлятора можно использовать Java в полный рост :)

На рисунке приведен пример стандартной диаложки, причем когда текст вводиться в IDE скрол есть. Где можно встать на грабли? Если в тексте динамически вставляется какой-нибудь путь и он очень длинный у юзера, то такой баг может пройти мимо разработчика и тестеров… У кого руки кривые? У разработчика инсталлятора тоже есть доля вины…
Усеченный текст на диалоге установки.

Есть акшены, которые не видны пользователю, они запускают .bat файлы или что-то подобное. Естественно, путь до .bat файла нужно взять в кавычки на случай пробелов. IDE наглым образом удаляет последние кавычки при сохранении. На грабли можно встать, если у разработчиков и у тестеров встретились пути без пробелов, а у юзера есть заветный пробел. Если предыдущий баг был косметическим, то батник точно запускает что-то нужное. У кого руки кривые? У разработчика инсталлятора тоже есть доля вины…

Есть акшены, которые запускают код разработчика, упакованный в .jar файлы. Если в .jar файле есть папка META-INF, то код проигнорируется. Довольно странно, но эта фича описана в документации…

eyeofhell напомнил баг о трудностях локализации. На картинке перевод «Деинсталяция завершена» вместо «Удалить полностью»
Денисталяция завершена не равно Uninstall Complete

Серьезный баг, который тянется от версии к версии в InstallAnywhere. Для учета установленного ПО используется .xml файл его можно найти так «C:\Program Files\Zero G Registry\.com.zerog.registry.xml». Дело в том, что запись в этот реестр происходит после того как юзер нажал кнопку «ГОТОВО» на последней диаложке инсталяции/деинсталяции, поэтому он смело может перезагружать комп, запускать другую инсталяшку или что-то подобное. Самое обидное, что изменить такое поведение невозможно. Проблемы, которые возникают при этом:
1. есть запись что программа установлена, но путь до нее пустой…
2. Получаем ошибку чтения файла, инсталлятор тихонько говорит «Хм, файл реестра какой-то кривой, сделаю новый» и создает :)
Чтобы поправить ситуацию несколько раз на своей машине удалял этот файл во время разработки и тестирования.

Извечный вопрс — что делать? Ставить, как будто ничего не было? А если крутятся сервисы, или они есть и не запущены, или в проекте есть конфликтные фичи? Не все файлы копируются в директорию установки. Здесь однозначного ответа для разработчиков не существует, нужно исходить из требований проекта и руководства…

Еще вопрос, почему для хранения данных об установленных программах используется xml-файл в случае InstallAnywhere или SQLite в случае Adobe?
Это делается для того чтобы обеспечить единый интерфейс при установке на различные платформы.

Более чем уверен, что проблема с инсталлятором продуктов Adobe упирается в вопросы связанные с лицензией, внутренним конфликтом фич и компонетов или чем-то подобным. И никак не связана с профессионализмом разработчиков инсталлятора.
Tags:
Hubs:
+11
Comments 19
Comments Comments 19

Articles