Этапы инсталляции и альтернативы внутри скрипта для Настраиваемых Действий в Windows Installer

Теория: При создании Настраиваемых Действий в продукте InstallShield Professional Windows Installer Edition вы получаете несколько вариантов выполнения внутри скрипта, из которых можете выбрать: 

Эта статья объясняет, назначение этих вариантов, как и на каком этапе они влияют на выполнение Вашего Настраиваемого Действия во время выполнения установки. Она также помогает установить Настраиваемое Действие в правильном месте Пользовательского Интерфейса ил Последовательности Выполнения, в таком порядке, чтобы избежать таких сообщений об ошибке, как "Невозможно сохранить запись скрипта. Транзакция не запущена".

 This article in English 
 Dieser Artikel in deutsch 

Последовательность Пользовательского Интерфейса Установки

В Последовательности Пользовательского Интерфейса

Вы можете использовать только Пользовательские Действия

Немедленного выполнения. Это относится также к таблице последовательности и событиям элемента управления DoAction.

Стандартное Действие ExecuteAction запускает последовательность выполнения как внутреннюю процедуру.

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

Немедленного выполнения, то есть запустить другой файл msi.

В заключение, выводится диалог

SetupCompleteSuccess, который определяется своим специальным номером в последовательности, значение которого  -1.

Последовательность Выполнения Установки

Часть последовательности выполнения между InstallInitialize и InstallFinalize обрабатывается в два этапа: Первым инсталлятор обрабатывает  действия (стандартные и настраиваемые действия) и записывает их последней строкой в скрипт установки. Затем он обрабатывает скрипт и непосредственно выполняет команды. Во второй фазе изменяется компьютер, в котором выполняется установка, то есть копируются файлы, сохраняются записи реестра и т.д.

Так как этих этапов два, то на первый взгляд может показаться, что инсталлятор проходит последовательность выполнения дважды: один раз при создании скрипта и один раз при его выполнении. Однако это не совсем похоже на правду.

В дополнение к созданию скрипта и выполнению скрипта здесь есть два специальных этапа установки, подтверждение и откат инсталляции, которые будут раскрыты далее в этом разделе.

Немедленное Выполнение во время создания скрипта

Пока инсталлятор создает скрипт, фактически выполняются только Пользовательские Действия Немедленного Выполнения. Все другие действия (такие Стандартные Действия, как InstallFiles и Пользовательские Действия Отложенного Выполнения) только записываются в скрипт.

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

Любые условия выполнения действий оцениваются на этом этапе.

Отложенное Выполнение во время выполнения скрипта

Когда скрипт создан, то есть очередь дошла до InstallFinalize, инсталлятор начинает выполнять скрипт. В системах, основанных на Windows NT, этот этап запускается в отдельном процессе. Все выполнение скрипта помещено "внутри" Стандартного Действия InstallFinalize.

Во время этого этапа Пользовательские Действия Отложенного Выполнения выполняются вместе со Стандартными Действиями. Они выполняются в том порядке, в котором они записаны в скрипте на этапе его создания и только если значения их условия выполнения соответствовали значению True во время создания скрипта.

Так как этот этап выполняется в отдельном процессе, Пользовательские Действия отложенного выполнения не могут получить прямого доступа к свойствам инсталлятора, и они не могут установить значение какого-либо свойства.

Выполнение Отката

Пока инсталлятор выполняет скрипт установки, он создает и скрипт отката. Для каждого Стандартного Действия в скрипте установки добавляется команда отката в скрипт отката. Инсталлятор не может автоматически уничтожить результаты изменений, выполняемых Пользовательскими Действиями в системе, где выполняется установка. Вместо этого он добавляет некоторое Пользовательское Действие отката в скрипт отката.

В дополнение, резервная копия любых файлов, которые перезаписывает инсталлятор, сохраняются во временном каталоге.

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

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

Скрипт отката выполняется снизу вверх, то есть самые последние действия откатываются первыми.

Если инсталлятор завершает процесс выполнения скрипта установки без прерывания, скрипт отката и все резервные копии файлов удаляются и выполняются все пользовательские действия фиксирования изменений.

Если функция отката отключена на том компьютере, в котором выполняется установка, скрипт отката не создается, не создаются также и резервные копии перезаписываемых файлов.

Выполнение фиксирования изменений

Пользовательских действия  фиксирования изменений - это противоположность действиям отката. Они добавляются в скрипт фиксирования изменений во время выполнения скрипта установки, в основном тем же способом, как и действия отката добавляются в скрипт отката.

Действия фиксирования изменений добавляются в скрипт фиксирования изменений, только если их условие установки соответствовало значению True во время создания скрипта инсталляции.

Скрипт фиксирования изменений выполняется в конце действия InstallFinalize, когда скрипт установки обработан и только если инсталляция не была прервана.

Назначение пользовательских действий фиксирования изменений  состоит в удалении любой резервной информации, которая была создана пользовательским действием.

Пример использования отложенных пользовательских действий, пользовательских действий отката и фиксирования изменений

Представьте себе пользовательское действие, которое будет изменять существующий файл. Это может быть пользовательское действие отложенного выполнения, так что эти изменения могут быть уничтожены, в случае если установка будет прервана. Поэтому пользовательское действие  во-первых, создало бы резервную копию файла, и затем изменило его.

Пользовательское действие отката удалит измененный файл и заменит его резервной копией. Также необходимо удалить резервную копию файла.

Пользовательское действие фиксирования изменений удалит файл резервной копии, так как инсталляция завершена успешно и  в дальнейшем он не понадобится.

Если функция отката отключена для  компьютера, на котором выполняется установка, скрипт фиксирования изменений не создается. Фиксирование изменений является парой по отношению к откату. Если функция отката отключена, Ваше пользовательское действие не сможет создать резервные копии файлов, и поэтому действия выполнения фиксирования изменений игнорируются в этом случае.

Отложенное Выполнение в контексте системы

Это - специальный тип пользовательских действий, которые используются для выполнения задач с повышенными привилегиями. В системах под управлением Windows NT / 2000 Windows Installer работает как служба и поэтому имеет полный доступ к системе. Однако для ограничения пользователей от выполнения от выполнения неправомочных задач, Windows Installer использует Имитирование для выполнения любых задач с привилегиями пользователя, работающего в данный момент в системе. Однако если установка с повышенными привилегиями включена системным администратором, этот тип пользовательских действий может запускаться системными привилегиями. Такие пользовательские действия называются также "отложенного выполнения без Имитирования пользователя " в документации MSI.

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

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

Несколько правил, которым Вы должны следовать

Пользовательские действия немедленного выполнения не должны изменять систему, в которой выполняется установка, потому что эти изменения

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

Каждое отложенное пользовательское действие должно иметь соотносящееся пользовательское действие отката.

Пользовательское действие отката должно быть установлено непосредственно перед отложенным пользовательским действием так, что оно будет дописано в скрипт отката непосредственно перед

выполнением отложенного действия. Это обеспечит корректность отката в случае, если инсталляция будет прервана во время выполнения Вашего пользовательского действия.

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

Пользовательские действия, которые должны быть запущены с повышенными привилегиями, должны принадлежать к типу отложенного выполнения в контексте системы.

Пользовательские действия отложенного выполнения, отката и фиксирования изменений могут быть помещены только  между действиями InstallInitialize и InstallFinalize. Нарушение этого правила приведет к возникновению ошибки 2762: «Невозможно выполнить запись скрипта. Транзакция не запущена».

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

Используйте пользовательские действия подтверждения изменений осторожно. Они не будут выполнены, если функция отката отключена.

Об авторе

Стефан Крюгер работает независимым консультантом по инсталляции, предлагает поддержку, индивидуальное программирование и выполнение работ независимо от InstallShield Software Corporation. Кроме его работы с заказчиками, он отвечает на вопросы в различных группах новостей и обслуживает Интернет сайт InstallSite.org, место, где разработчики программ установки разделяют ресурсы и информацию с коллегами.

Если у Вас имеются любые комментарии об этой статье, или желание предложить тему, которую Стефан будет освещать в своих статьях в будущем, пожалуйста, напишите по электронной почте: E-Mail. Чтобы прочитать статьи Стефана по предыдущим темам ленты новостей InstallShield, посетите страницу http://www.installsite.org/isnews.htm.

Перевод на русский язык

Антон Спицын, MCP (Microsoft Certified Professional), член форума InstallSite.org

English News Discussions Windows Installer Related Tools More Help InstallScript About InstallSite Shop Site Search
deutsch Neuigkeiten Diskussionsgruppen Windows Installer MSI FAQ Artikel     Shop Suche

Copyright © by InstallSite Stefan Krueger. All rights reserved. Legal information.
Impressum/Imprint Datenschutzerklärung/Privacy Policy
By using this site you agree to the license agreement. Webmaster contact.