Улучшен обходной способ работы компонента RichEdit в среде Wine, который предотвращает длительную задержку при использовании очень больших текстов в сочетании с тёмным пользовательским стилем мастера.
Исправлено: из соображений безопасности в примере сценария PowerShell.iss для загрузки файла powershell.exe теперь используется абсолютный путь. Если вы использовали описанный метод в своих собственных сценариях, вам следует внести аналогичные изменения.
Препроцессор Inno Setup:
Исправлено: восстановлена компиляция при использовании пользовательских функций без параметров (была нарушена в 6.7.2). Например: #define MyAppName() "My Program".
Добавлена новая встроенная переменная SysPath.
7.0.0-beta (2026-05-18)
Мы с гордостью представляем Inno Setup 7, который включает в себя как 64-разрядную версию, так и 32-разрядную.
Обе версии Inno Setup 7 могут создавать 32-разрядные или 64-разрядные установщики, их можно устанавливать параллельно и они могут сосуществовать вместе с Inno Setup 6.
Кроме того, добавлена поддержка длинных путей, что устраняет ограничения MAX_PATH.
Большое внимание было уделено обеспечению максимальной обратной совместимости с Inno Setup 6, включая обратную совместимость с поддержкой длинных путей и совместимость между 32-разрядными и 64-разрядными установщиками.
Эта работа была бы невозможна без поддержки, оказанной путем приобретения коммерческих лицензий. Используете Inno Setup в коммерческих целях? Пожалуйста, купите лицензию.
Коммерческие лицензии включают два года обновлений — как основных, так и промежуточных. Если вы недавно приобрели коммерческую лицензию, она также даёт право на использование Inno Setup 7.
64-разрядные установщики
В обеих версиях по умолчанию используется создание 32-разрядных установщиков. Чтобы создать 64-разрядный установщик вместо 32-разрядного, установите в секции [Setup] для директивы SetupArchitecture значение x64. Это также изменит значения директив ArchitecturesAllowed и ArchitecturesInstallIn64BitMode на x64compatible, в результате чего 64-разрядные установщики по умолчанию будут работать в 64-разрядном режиме установки.
Основные преимущества и отличия:
64-разрядные установщики позволяют использовать максимальный размер словаря для методов сжатия lzma и lzma2 в 3,8 ГБ вместо 1 ГБ. Перед использованием больших размеров словаря ознакомьтесь с требованиями к памяти, указанными в разделе справки Compression.
В 64-разрядных установщиках по умолчанию включена функция ASLR с высокой энтропией. Это помогает соответствовать корпоративным политикам или требованиям сторонних организаций, предписывающим использование 64-разрядных исполняемых файлов.
64-разрядные установщики полностью поддерживают 32-разрядный режим установки и наоборот. Чтобы использовать 64-разрядный установщик, оставаясь в 32-разрядном режиме установки (например, потому что вы непреднамеренно развертывали 64-разрядные приложения в 32-разрядном режиме), установите для директивы ArchitecturesInstallIn64BitMode пустое значение, что переопределит значение по умолчанию.
Существующие инсталляторы, выполненные 32-разрядными программами установки, могут быть без проблем обновлены 64-разрядными программами установки и наоборот.
Особенности 64-разрядного программирования на языке Паскаль:
В 32-разрядных установщиках тип Extended имеет размер 10 байт, тогда как в 64-разрядных установщиках он занимает 8 байт и является лишь псевдонимом типа Double.
В 32-разрядных установщиках типы NativeInt и NativeUInt имеют размер 4 байта, тогда как в 64-разрядных установщиках — 8 байт. То же относится ко всем производным от них типам, например HWND.
В примере CodeDll.iss демонстрируется, как реализовать поддержку 32- и 64-разрядных установщиков в одном сценарии.
Обратите внимание: хотя такие типы, как HWND, в 64-разрядных процессах имеют размер 8 байт (64 бита), в 64-разрядной Windows для совместимости используются 32-разрядные значения дескрипторов. При передаче дескриптора между 32- и 64-разрядными приложениями значимыми являются только младшие 32 бита, поэтому допустимо усечение с 64 до 32 бит или знаковое расширение с 32 до 64 бит.
Как в 32-разрядных, так и в 64-разрядных установщиках структурные типы данных record (записи) в контексте программирования на языке Паскаль всегда являются "упакованными" (packed). При вызове функции Windows API или внешней DLL, которая ожидает выровненные записи, может потребоваться вручную добавить заполнители для обеспечения правильного выравнивания полей в памяти. Даже если 32-разрядному установщику этого не требовалось, для 64-разрядного установщика это является обязательным из-за различий в правилах выравнивания и размерах полей.
Невозможно загрузить 32-разрядные DLL в 64-разрядных установщиках, так как Windows не разрешает 64-разрядным процессам загружать 32-разрядные DLL (и наоборот). Однако всегда можно запускать как 32-разрядные, так и 64-разрядные EXE-файлы с помощью функции Exec или через секцию [Run].
В 32-разрядных установщиках функция CreateCallbackне поддерживает параметры обратного вызова, передаваемые по значению, если их тип превышает размер 4 байта, например, Int64, UInt64, Double, Extended и Currency. В 64-разрядных установщиках поддерживаются типы параметров, передаваемых по значению, большего размера.
64-разрядные библиотеки COM-интерфейсов (.tlb) теперь могут быть зарегистрированы или удалены только 64-разрядными установщиками, 32-разрядные библиотеки – только 32-разрядными установщиками.
Регистрация и удаление 64-разрядных библиотек из 32-разрядных установщиков больше не поддерживается.
Константа {sysnative} недоступна 64-разрядным установщикам или любым другим 64-разрядным приложениям, поэтому её значение следует использовать только, например, для передачи 32-разрядному приложению.
В наших тестах на "Windows Server 2016 Datacenter Server Core" и "Windows Server 2025 Datacenter: Azure Edition Core" со всеми функциями WOW64, отключенными и удаленными с помощью DISM, 64-разрядные установщики по-прежнему работают корректно, даже при запуске в 32-разрядном режиме установки.
Удалена функция EnableFsRedirection. Вместо неё теперь следует использовать функцию ApplyPathRedirRulesForCurrentProcess или 64-разрядный установщик. Для 32-разрядных установщиков также можно использовать значение {sysnative}.
Чтобы из 32-разрядного установщика запускать исполняемые файлы из 64-разрядной системной папки, используйте функции ExecWithNativeSysDir, ExecAndLogOutputWithNativeSysDir или ExecAndCaptureOutputWithNativeSysDir.
Из функции RegisterExtraCloseApplicationsResource удален параметр DisableFsRedir. Для регистрации 64-разрядного файла из 32-разрядного установщика (или наоборот) используйте функцию ApplyPathRedirRulesForCurrentProcess.
Добавлены функции ApplyPathRedirRules и IsCurrentProcess64Bit.
Добавлены следующие типы данных: UInt64, NativeInt, NativeUInt, LONG, ULONG, LONG_PTR, ULONG_PTR, THandle, HANDLE, COLORREF, HWND, HDC, HBITMAP, HFONT, HKEY, HINSTANCE, HMODULE, LRESULT, WPARAM, LPARAM, SIZE_T и SSIZE_T.
Эти новые типы дополняют следующие аналогичные типы, которые были доступны ранее: Int64, DWORD_PTR, INT_PTR и UINT_PTR. Если в вашем сценарии уже было указано определение одного из новых типов, просто удалите его.
64-разрядные IDE компилятора и ISCC
Чтобы использовать 64-разрядные версии IDE компилятора и ISCC, установите 64-разрядную версию Inno Setup 7. Обе версии одинаково читают сценарии, используют одни и те же настройки и могут компилировать 32- и 64-разрядные установщики.
Чтобы узнать, какую версию вы установили, запустите IDE компилятор сценариев. 32-разрядная версия в строке заголовка будет иметь надпись "32-bit", а 64-разрядная нет.
Рекомендуется использовать 64-разрядную версию.
Основные преимущества и отличия:
Любая из версий может собирать установщики любой архитектуры: 32-разрядные компиляторы могут создавать 64-разрядные установщики и наоборот.
Обе версии могут быть установлены параллельно и включают в себя одинаковые примеры и файлы справки.
64-разрядные компиляторы, как правило, обеспечивают более быстрое сжатие LZMA при полной совместимости с существующими сценариями.
В Windows 11 на базе Arm64 они используют двоичный файл ARM64EC (islzma-Arm64EC.dll) для обеспечения родной (native) производительности.
Директива LZMAUseSeparateProcess в секции [Setup] 64-разрядными компиляторами игнорируется, поскольку 64-разрядные процессы могут напрямую выделять больше памяти, что устраняет необходимость в использовании отдельного процесса сжатия.
Поддержка длинных путей
Программа установки и удаления теперь поддерживают пути с расширенной длиной (так называемые "суперпути"), устраняя ограничения MAX_PATH.
Это относится как к 32-разрядным, так и к 64-разрядным установщикам.
Связанные изменения:
Зарегистрированные пути теперь являются путями расширенной длины. Конечному пользователю по-прежнему отображаются обычные пути.
К примеру, обычный путь выглядит так: c:\Program Files\My Program
Расширенная версия того же самого пути будет следующей: \\?\c:\Program Files\My Program
Константы {app}, {autopf} и {tmp} по-прежнему возвращают обычные пути.
Программирование на языке Паскаль:
Добавлены функции PathConvertNormalToSuper и PathConvertSuperToNormal.
Вспомогательная функция IsWildcard теперь проверяет только последний компонент пути, что позволяет избежать ложных срабатываний при использовании префиксов путей увеличенной длины.
Повышение безопасности
В качестве дополнительных мер безопасности компилятор больше не разрешает использование директив компиляции, таких как #include и др., в файлах сообщений .isl, которые указываются в секции [Languages]. Компиляция будет прервана при обнаружении строк, начинающихся с #. Кроме того, ISPP отключен и не может быть включен (команда #preproc ispp не допускается), поэтому любые встроенные директивы ISPP ({#...}) не обрабатываются.
Другие изменения
Кроме того, в обеих редакциях были внесены следующие изменения:
IDE компилятора:
Файл IDE компилятора был переименован с Compil32.exe в ISIDE.exe.
Добавлена поддержка автозавершения для функций ISPP и предопределенных переменных в выражениях ISPP, таких как #define, #if, #emit, и #expr.
Также доступны подсказки при наведении курсора мышки на функции ISPP, позволяющие получить информацию о прототипе функции, именах, типе и порядке параметров.
Добавлена поддержка автозаполнения для поддиректив ISPP #pragma: warning, message и option.
Исправлена ошибка функции автозавершения для имен, констант и директив ISPP, которая возникала после наведения курсора мыши на секцию [Code].
Подсказки параметров теперь обновляются также при использовании клавиш со стрелками влево и впаво, а также после клавиш "Backspace" или "Delete".
При использовании регулярного выражения, соответствующего тексту нулевой длины (например, ^ или \b), функции "Найти в файлах", "Заменить все" и "Выделить все найденные вхождения" могут войти в бесконечный цикл или пропустить действительное совпадение в конце текста.
Секция [Setup]:
Добавлен новый встроенный стиль и поддерживаемый напрямую директивой WizardStyle: stellar. Стиль "stellar" — это альтернативный светлый стиль с белым текстом на переднем плане, идеально подходящий для использования в сочетании с тёмным фоновым цветом или изображением. Например:
Директива AppVerName теперь по умолчанию принимает значение AppNameAppVersion (значения разделены пробелом) вместо AppName version AppVersion (локализованное).
Если вы желаете сохранить локализованное слово "version", используйте сообщение NameAndVersion: AppVerName={cm:NameAndVersion,My Program,1.5}
Для директивы ArchiveExtraction теперь может быть установлено значение auto (используется по умолчанию), с которым автоматически выбирается подходящий метод извлечения на основании записей в секции [Files].
Если выбран вариант basic, поскольку ни одна запись не использует флаг extractarchive, но в коде сценария используется одна из вспомогательных функций ExtractArchive или CreateExtractionPage, вы должны вручную указать правильный метод извлечения.
Для директивы TimeStampsInUTC теперь по умолчанию установлено значение yes.
Программирование на языке Паскаль:
Добавлен новый параметр OnLog для секции [Run]. В сочетании с флагом logoutput он определяет имя функции, которая будет вызываться для каждой строки вывода программы вместо непосредственного включения ее в файл журнала.
См. обновленный пример сценария PowerShell.iss.
Добавлены новые функции StrToUInt64, StrToUInt64Def и UIntToStr.
Функции Chr и StringOfChar теперь корректно принимает значения, превышающие 255, а также широкие символы.
Функция FloatToStr больше не выводит лишние нули в конце числа.
Использование оператора Exit в блоке try..finally теперь работает корректно, если в блоке finally содержатся вызовы функций.
В блоке else оператора case теперь можно размещать несколько операторов без обязательного использования begin/end.
Добавлена возможность указывать соглашение о вызовах safecall в интерфейсах. Это упрощает объявления методов и избавляет от необходимости ручного вызова OleCheck. Смотрите обновленный пример сценария CodeAutomation2.iss.
Добавлен маркер {$NOWARN} для подавления предупреждений компилятора в секции [Code]. Его можно включить в любом месте строки кода. Также он распознается внутри комментариев.
Улучшен оператор as: теперь он выполняет ту же проверку типов во время выполнения, что и оператор is.
Исправлена ошибка несоответствия типов во время выполнения при присваивании открытых и динамических массивов.
Исправлены ошибки в функциях InitializeBitmapButtonFromIcon (не работала в момента появления) и InitializeBitmapImageFromIcon (перестала работать с версии 6.5.0).
Препроцессор Inno Setup:
Ранее недокументированные функции GetFileCompany, GetFileDescription, GetFileCopyright, GetFileOriginalFilename и GetFileProductVersion были переименованы в GetFileCompanyString, GetFileDescriptionString, GetFileCopyrightString, GetFileOriginalFilenameString и GetFileProductVersionString соответственно, что обеспечивает их согласованность с существующей (также ранее недокументированной) функцией GetFileVersionString. Старые наименования функций по-прежнему действительны.
Задокументировано различие между GetFileVersionString и GetVersionNumbersString.
Исправлена ошибка обработки файловых имен вспомогательными функциями ReadIni, WriteIni и Is64BitPEImage при работе с другими функциями, связанными с файлами.
Помощь, отображаемая параметром командной строки /HELP, разделена на два окна для удобства чтения.
Добавлено обходное решение реализации компонента RichEdit в среде Wine (Linux), из-за ограничений которого цвет текста документов, указанных в секции [Setup] с помощью директив LicenseFile, InfoBeforeFile и InfoAfterFile, отображался некорректно при использовании стилей.
В ISCC внесено изменение: теперь при чтении из реестра ключ Inno Setup больше не создается.
Исходный код библиотек 7-Zip, LZMA SDK, Scintilla и zlib, используемых в Inno Setup, обновлен до последних версий.
Метод full извлечения архива теперь поддерживает архивы формата .zst (Zstandard).
Исходный код Inno Setup теперь содержит метаданные SPDX SBOM.
Исправлено: записи в секции [Files] с флагом extractarchive не выполняли извлечение, если первая запись в архиве не совпадала с именем извлекаемого файла.
Например, если в качестве первой записи архив содержал файл в подкаталоге (к примеру, subdir\file1.txt, за которым следовала запись file2.txt) и не использовался флаг recursesubdirs, то ни один файл не был бы извлечён, даже файл file2.txt.