Как только начинается фактический процесс установки, все задачи по
установке выполняются в следующем порядке:
- Если для директивы CloseApplications
было задано значение yes, программа установки закрывает
приложения, которые используют файлы нуждающиеся в обновлении.
- Обрабатывается секция [InstallDelete].
- Записи секции [UninstallDelete]
сохраняются в журнал деинсталляции (который на данном этапе хранится в
памяти).
- При необходимости создаётся каталог приложения.
- Обрабатывается секция [Dirs].
- При необходимости резервируется имя файла для журнала деинсталляции.
- Обрабатывается секция [Files]
(кроме регистрации файлов).
- Обрабатывается секция [Icons].
- Обрабатывается секция [INI].
- Обрабатывается секция [Registry].
- Выполняется регистрация необходимых файлов, за исключением тех,
регистрацию которых требуется выполнить после перезагрузки системы.
- При необходимости создаётся запись в параметрах системы Установка
или изменение программы.
- Записи секции [UninstallRun]
сохраняются в журнал деинсталляции.
- Завершается создание программы и журнала деинсталляции и они
сохраняются на диск. После этого пользователю запрещается отменять
установку и любые последующие ошибки не приведут к откату того, что
уже было установлено.
- Обрабатывается секция [Run], за
исключением записей с флагом postinstall, которые будут
выполнены после отображения страницы "Установка завершена".
- Если для директивы RestartApplications
было задано значение yes, программа установки перезапускает
закрытые приложения, которые поддерживают процесс перезапуска.
- Если для директивы ChangesAssociations
было задано значение yes или записанная в сценарии функция логического выражения вернула
значение True, выполняется обновление файловых ассоциаций.
- Если для директивы ChangesEnvironment
было задано значение yes или записанная в сценарии функция логического выражения вернула
значение True, выполняется уведомление приложений об
изменении переменных среды окружения.
Все записи обрабатываются программой установки в порядке их указания в
секции.
Вы сами можете проконтролировать этот порядок, открыв сценарий в IDE
компилятора и несколько раз нажав [F7] (Шаг с заходом): каждый раз,
когда программа установки или удаления будет обрабатывать запись, IDE
приостановит её выполнение и покажет вам эту запись.
Отмена всех изменений выполняется программой деинсталляции в обратном
порядке, в котором они были созданы программой установки. Это связано с
тем, что журнал деинсталляции обрабатывается с конца.
Например:
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesectionifempty
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"; Flags: uninsdeleteentry
В примере выше, программа установки сначала запишет в журнал
деинсталляции данные для флага uninsdeletesectionifempty из
первой записи, создаст ключ из второй записи и, наконец, запишет данные
для флага uninsdeleteentry. При удалении программы,
деинсталлятор сначала обработает флаг uninsdeleteentry, удалив
ключ, затем обработает флаг uninsdeletesectionifempty, удалив
секцию.
Обратите внимание, что обработка записей в секциях [UninstallRun]
и [UninstallDelete] выполняется в том же порядке, в каком они
указаны в сценарии (а не в обратном).