Лютый, бешеный прорыв))

Sep 28, 2009 17:58

Я это наконец то сделала. Уже месяц занимаюсь написанием инсталляционных скриптов. Удались установка на 32/64-битный машинах клиента, серверной части, клиент + сервер на выбор с патчами. Вдохновленный успехами шеф предложил сделать мультиинстанционный сетап, чтобы инстанции продукта различались суффиксом Environment (рабочая среда). Надо было сделать так, чтобы юзер задавал Environment в начале установки, и если он новый - то устанавливать новую копию продукта, если старый - то апгрейдить/чинить/удалять копию с данной рабочей средой. Звучало логично, и я сама загорелась идеей сделать "все как у людей и чтобы летало". Вот только проблема оказалась в том, что в Installaware можно одной командой Transform Instance сделать мультиинстанционный сетап, а вот проапдейтить/снести уже существующую копию запуская исходный сетап - проблема. Долго читала форум Installaware. Там предлагали решение, как проапгрейдить ВСЕ существующие копии разом - записать в текстовый файл уникальные коды сетапов, а затем в цикле вызывать Uninstall каждого сетапа, а затем устанавливать заново. Мне не очень понравилось такое решение, потому что надо давать юзеру возможность выбрать, что он хочет сделать с данной копией. Долго парилась, в конечном счете нашла вот такое решение. Кусок кода, где выясняется, апгрейдить или инсталлировать новую копию:

Display Dialog: Environment, wait for dialog to return (modal)
Set Variable TITLE to $TITLE$ - $Environment$
Set Variable ISINSTALLED to FALSE
Set Variable PACKAGECODE to
Read Registry Key HKCR\\SOFTWARE\My Company\$TITLE$ into PACKAGECODE
Get Installed State for $PACKAGECODE$ into Variable ISINSTALLED
if Variable ISINSTALLED Equals TRUE
Set Variable MAINTENANCE to TRUE
else
if Variable NEWINSTANCE Equals TRUE
Transform Instance
end
end

Вот ради таких моментов и стоит работать)))

работа, installaware

Previous post Next post
Up