Поддержка сценариями Inno Setup языка Pascal
(современный Delphi – язык программирования, подобный Паскаль)
предоставляет множество дополнительных возможностей по созданию,
настройке и управлению программой установки или удаления во время
выполнения. Вот некоторые примеры:
- Поддержка прерывания запуска программы установки или удаления при
определённых условиях.
- Поддержка добавления дополнительных страниц мастера в программу
установки во время выполнения.
- Поддержка извлечения и использования функций DLL непосредственно в
коде сценария до, в течении или после установки.
- Поддержка сценарных констант, которые имеют те же возможности, что и
обычные константы, но являются более функциональными: считывать данные
из реестра, INI-файлов, командной строки и многое другое.
- Поддержка удаления типов, компонентов и/или задач во время
выполнения при определённых условиях.
- Поддержка условной установки записей [Files], [Registry],
[Run] и т.д. в соответствии с определёнными условиями.
- Поддержка множества функций из языка Pascal: практически всё, что
делает/может Inno Setup и больше.
Также доступен встроенный
отладчик, позволяющий выполнить отладку сценария: выявить ошибки,
изучить значения локальных переменных, функций или процедур,
проанализировать стек вызовов и т.д. и т.п.
Сценарным интерпретатором языка Pascal, используемого
Inno Setup, является компонент RemObjects Pascal Script, разработанный
Carlo Kok. Также как и Inno Setup, RemObjects Pascal Script находится в
свободном доступе и поставляется с исходным кодом. Дополнительную
информацию смотрите по ссылке http://www.remobjects.com/ps
.
Примечание: Pascal-интерпретатор работает исключительно
во время выполнения и не имеет никакой функциональности при компиляции.
Языковые отличия по сравнению с Delphi
Сценарный язык Паскаль имеет ряд отличий по сравнению с Delphi.
Ключевые отличия следующие:
- Объявление встроенных переменных (var) или констант (const)
не поддерживаются. Все локальные переменные должны быть объявлены в блоке
var перед begin.
- Объявление локальных констант (const) или типов (type)
не поддерживается. Перед begin допускаются только блоки var
и label.
- Отсутствует синтаксис Exit(Value). Сначала нужно присвоить
значение переменной Result, а затем отдельно вызвать Exit.
- Типизированные константы (вида const X: Integer = 1) не
поддерживаются. Допускаются только нетипизированные константы (например,
const X = 1).
- Значения параметров по умолчанию не поддерживаются.
- Перезагрузка функций или процедур не поддерживается.
- Ключевое слово raise не поддерживается. Вместо него следует
использовать RaiseException(Msg) или RaiseLastException.
- В блоках except конструкция on E: ExceptionType do
не поддерживается. Для анализа текущего исключения следует использовать
GetExceptionMessage.
- Объявление собственных классов не поддерживается. Допускается использование
только тех классов, которые определены в Inno Setup.
- Вариантные записи не поддерживаются.
- Параметры const передаются по значению (копируются), а не по
ссылке, как в современном Delphi.
- Оператор / всегда возвращает результат типа Extended,
даже если оба операнда являются целыми числами. Для целочисленного деления
используйте div.
- Break и Continue не являются зарезервированными
словами. Это обычные идентификаторы, которые особым образом распознаются
внутри тел циклов. Если объявить локальную переменную или константу с
именем Break или Continue, она перекроет стандартное
поведение управления циклом.
- Функции Low, High или SizeOf следует
применять к переменной, а не к типу.
См. также:
Создание секции [Code]
Функции событий
Сценарные константы
Параметр "Check"
Параметры "BeforeInstall" и "AfterInstall"
Код деинсталляции
Примеры сценариев
Справочник поддерживаемых функций
Справочник поддерживаемых классов
Использование дополнительных страниц мастера
Использование DLL файлов
Использование COM-объектов
Встроенный отладчик