Имя пользователя:
Пароль:
 

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2398
Благодарности: 573

Профиль | Отправить PM | Цитировать


Если рассматривать эту часть проекта , как отдельную утилиту формирования NSIS кода для MSI установки, то происходить будет следующее :

Но сначала ещё немного лирики. На кой нам получать ещё и ProductName ? А на той, чтобы видеть над прогрессом установки не бестолковое мельтешение устанавливаемых файлов (или отсутствие оного), что обычно и наблюдаем по умолчанию, а видеть то, что конретно в данный момент устанавливается. Полученный ProductName и будем использовать в DetailPrint "Installing....

Следующий момент. Если с установкой одного msi пакета всё более-менее ясно, то как быть когда их придётся устанавливать несколько ?
Вот конкретный пример, когда я пересобирал отдельное приложение из гигантского пакета Adobe Creative Suite CS5 , для которого пришлось устанавливать аж 8 разных msi пакетов ! (Хотя по сути это были, расчленённые на отдельные дистрибутивы, составляющие их разных VC++... Но разрабам же виднее...)
Как быть с такими случаями в нашем случае ? Я бы предусмотрел в скрипте выбор для разных вариаций msi пакетов.
Например, для начала пусть присутствуют 9 чекбоксов для выбора. Тут есть нюансы, но про это позже...

Пакеты эти, надо предварительно подготовить, создав (для моего примера) 8 папок с именами 1...8, и в каждую из которых, поместить нужные msi дистпибутивы.

Т.е. , что получается :

Запускаем скомпилированный скрипт.

Отмечаем нужные для установки msi пакеты (msi1...msi8)

Отмеченные папки 1...8 с содержимым копируются в $TEMP. В каждую папку копируется файл vbs скрипта (чтобы не было путаницы).

Vbs скрипт начинает свою работу, создав в каждой папке ProductCode.txt и ProductName.txt.

Данные из ProductCode.txt и ProductName.txt заносятся в соответствующие переменные и записываются в код нового созданного файла msi.nsi. Где он будет создан, не критично. К примеру, в C:/myMSInsi

В этот файл msi.nsi записывается (пример на основе кода из справочника, наверное можно и иначе) :
Код: Выделить весь код
!define MSIGETPRODUCTINFO '!insertmacro MsiGetProductInfo'
Var MSI_PRODUCT
!macro MsiGetProductInfo PRODUCTCODE PROPERTY
и т.д.

Section 1
  SetOverwrite on
  ${MSIGETPRODUCTINFO} "{переменная для кода продукта 1 msi пакета)}" "ProductName" 
  и т.д.
SectionEnd
Сколько выбрано MSI пакетов для установки - столько запишется и секций.

Ну и в конце "подчищаем" за собой, удаляя не нужное.

Готовый код из файла msi.nsi используем для дальнейшей работы.

Моё сочинение наверняка спорно, потому прошу принять участие в "доводке" и совершенствовании...

Последний раз редактировалось MKN, 27-05-2011 в 10:53.


Отправлено: 10:47, 27-05-2011 | #148