Секция [Files]

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

Пример секции [Files]:

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.CHM"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme

Обязательно ознакомьтесь с Замечаниями в конце этого раздела.

Ниже приведен список поддерживаемых параметров:

Source  (обязательный)

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

Допускается одной записью указывать группу файлов, используя символы подстановки (маску). В этом случае все файлы, соответствующие маске, будут иметь одинаковые опции.

Если указан флаг external, то параметр Source должен содержать полный путь к существующему файлу (или маске) на распространяемом носителе или в системе пользователя (например, "{src}\license.ini").

Можно использовать константы, но только если указан флаг external. Это обусловлено тем, что компилятор не выполняет какую-либо трансляцию констант самостоятельно.

Примеры:
Source: "MYPROG.EXE"
Source: "Files\*"
DestDir  (обязательный)

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

Примеры:
DestDir: "{app}"
DestDir: "{app}\subdir"
DestName

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

Пример:
DestName: "MYPROG2.EXE"
Excludes

Определяет список файлов/папок по маске для исключения из программы установки.Для разделения масок в списке используется запятая. Этот параметр нельзя комбинировать с флагом external.

Маски имён могут содержать символы подстановки ("*" и "?"). Заметьте, что в отличии от параметра Source, для Excludes используется простая, Unix-подобная процедура сопоставления. Точка в шаблоне является важным элементом. Так, указание маски "*.*" не исключит файлы без расширения (для этого нужно использовать маску "*"). Кроме того, знаку вопроса "?" всегда соответствует только один символ, таким образом маска вида "?????" не исключит файлы с именами длиной менее пяти символов.

Если маска начинается с обратной косой черты ("\"), она сопоставляется с началом имени пути, в противном случае она сопоставляется с концом имени пути. Таким образом, маска "\foo" исключит только файл с именем "foo" в корневой папке. С другой стороны маска "foo" исключит любые файлы с именем "foo", где бы они ни находились.

Маски имён могут содержать символы обратной косой черты. Так маска вида "foo\bar" исключит оба каталога, и "foo\bar", и "subdir\foo\bar", а маска вида "\foo\bar" - только "foo\bar".

Примеры:
Source: "*"; Excludes: "*.~*"
Source: "*"; Excludes: "*.~*,\Temp\*"; Flags: recursesubdirs
ExternalSize

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

Пример:
ExternalSize: 1048576; Flags: external
Attribs

Определяет дополнительные атрибуты для файла. Может содержать один или несколько атрибутов: readonly - только для чтения, hidden - скрытый, system - системный, notcontentindexed - не индексируемый службой поиска. Если этот параметр не указан, то программа установки не назначает файлу никаких специальных атрибутов.

Пример:
Attribs: hidden system
Permissions

Позволяет указать дополнительные разрешения для файла в ACL (Access Control List - список контроля доступа). Не рекомендуется использовать этот параметр, если вы не знакомы со списками ACL или не понимаете зачем их необходимо изменять, так как его неправильное использование может негативно повлиять на безопасность системы.

Для эффективной работы параметра файл должен находиться в разделе, который поддерживает ACL (такой как NTFS), а текущий пользователь должен иметь возможность изменять разрешения на файл. Если эти условия не будут выполнены, разрешения не вступят в силу и сообщение об ошибке не будет показано.

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

Указанные разрешения устанавливаются независимо от того, существовал ли файл до установки.

Параметр может содержать один или более значений, разделённых пробелами, в следующем формате:

В секции [Files] поддерживаются следующие типы доступа:

full

Предоставляет разрешение "Полный доступ", которое совпадает с разрешением modify (см. ниже), но дополнительно позволяет указанному пользователю/группе стать владельцем файла и изменить его полномочия. Используйте этот тип как можно реже; как правило, modify будет достаточно.

modify

Предоставляет разрешение "Модификация", которое позволяет указанному пользователю/группе читать, выполнять, изменять и удалять файл.

readexec

Предоставляет разрешение "Чтение и выполнение", что позволяет указанному пользователю/группе читать и запускать исполняемый файл.

Пример:
Permissions: users-modify
FontInstall

Сообщает программе установки, что файл является шрифтом, который необходимо установить. Значением этого параметра является имя шрифта, заданного в реестре или WIN.INI. Имя шрифта должно совпадать с именем, которое отображается при двойном щелчке по файлу шрифта в проводнике. Обратите внимание, что программа установки автоматически добавит "(TrueType)" в конец имени.

Если файл не является шрифтом TrueType, в параметре Flags необходимо указать флаг fontisnttruetype.

Рекомендуется использовать флаги onlyifdoesntexist и uninsneveruninstall при установке шрифтов в каталог {autofonts} .

Если установка выполняется в режиме не административной установки, то для успешной установки шрифта требуется Windows 10 версии 1803 или выше.

Для совместимости с Windows 64-бит не следует устанавливать шрифты в каталог {sys}. В качестве целевого каталога используйте константу {autofonts}.

Пример:
Source: "OZHANDIN.TTF"; DestDir: "{autofonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall   
StrongAssemblyName

Определяет файл сборки со строгим именем. Используется только программой удаления.

Этот параметр игнорируется, если не указан флаг gacinstall.

Пример:
StrongAssemblyName: "MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdef123456, ProcessorArchitecture=MSIL"   
Flags

Этот параметр представляет собой набор дополнительных опций. Допускается использовать несколько опций, разделяя их пробелами. Поддерживаются следующие опции:

32bit

Приводит к сопоставлению константы {sys} с 32-разрядным каталогом System, если используется в параметрах Source и DestDir, флаги regserver и regtypelib обрабатывают файл как 32-разрядный и, наконец, флаг sharedfile обновляет 32-разрядный раздел реестра SharedDLL. Такое поведение используется по умолчанию в 32-разрядном режиме установки.

64bit

Приводит к сопоставлению константы {sys} с 64-разрядным каталогом System, если используется в параметрах Source и DestDir, флаги regserver и regtypelib обрабатывает файл как 64-разрядный и, наконец, флаг sharedfile обновляет 64-разрядный раздел реестра SharedDLL. Такое поведение используется по умолчанию в 64-разрядном режиме установки.

allowunsafefiles

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

comparetimestamp

(Не рекомендуется; см. ниже)
Указывает программе установки выполнять сравнение отметок времени (последнее время записи/изменения), если устанавливаемый файл на системе пользователя уже существует и соблюдается хотя бы одно из следующих условий:

  • Ни существующий файл, ни устанавливаемый файл не содержат сведений о версии.
  • Используется флаг ignoreversion.
  • Флаг replacesameversion не используется, а существующий файл и устанавливаемый файл имеют одинаковый номер версии (как указано в информации о версии файлов).

Если существующий файл имеет более раннюю отметку времени (последнее время записи/изменения), чем устанавливаемый файл, существующий файл будет заменен. Иначе замена выполнена не будет.

Не рекомендуется использовать этот флаг, кроме случаев крайней необходимости, поскольку с ним связана проблема следующего характера. Разделы NTFS хранят отметки времени в формате UTC (в отличие от разделов FAT), что приводит к смещению локальных временных меток, с которыми по умолчанию работает программа Inno Setup, когда пользователь изменяет часовой пояс системы, или когда происходит переход на летнее или зимнее время. Это может создать неоднозначную ситуацию: выполняется замена файлов, когда пользователь не ожидает, что они будут заменены, или наоборот, пользователь ожидает замену файлов, но она не происходит.

confirmoverwrite

Формирует для пользователя запрос с подтверждением замены существующего файла.

createallsubdirs

По умолчанию компилятор пропускает пустые каталоги, когда выполняет рекурсивный обход вложенных каталогов, согласно заданной маске файлов в параметре Source. Применение этого флага инициирует создание таких каталогов во время установки (как если бы для их создания была использована секция [Dirs]).

Это флаг должен быть объединён с флагом recursesubdirs.

deleteafterinstall

Предписывает программе установки выполнить обычную установку файла, но затем удалить его после завершения установки (или прекращения установки). Это может быть полезно для извлечения временных данных, необходимых программе, запускаемой в секции [Run].

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

Этот флаг не может быть объединён с флагами isreadme, regserver, regtypelib, restartreplace, sharedfile или uninsneveruninstall.

dontcopy

Указывает программе установки не копировать файл в систему пользователя, а только включить в инсталлятор. Этот флаг полезен, если файл обрабатывается исключительно в секции [Code] и извлекается с помощью функции ExtractTemporaryFile.

dontverifychecksum

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

Это флаг должен быть объединён с флагом nocompression.

external

Этот флаг предписывает программе установки не выполнять компиляцию файла, заданного параметром Source, а вместо этого осуществлять его копирование напрямую из носителя информации или из системы пользователя. Дополнительную информацию смотрите в описании параметра Source.

fontisnttruetype

Сообщает программе установки, что устанавливаемый файл шрифта, указанный в параметре FontInstall, не является шрифтом TrueType.

gacinstall

Предписывает установку файла в глобальный кэш сборок .NET. При использовании в сочетании с флагом sharedfile, файл будет удалён только при достижении нулевого значения счётчика ссылок.

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

При попытке использования этой константы в системе без .NET Framework будет вызвано исключение.

ignoreversion

Указывает программе установки не выполнять сравнение версий. Замена существующих файлов будет происходить независимо от их номера версии.

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

isreadme

Сообщает программе установки, что файл является файлом "README". Этот флаг может иметь только один файл в установке. Когда использован этот флаг, пользователю будет выдан запрос на открытие этого файла по завершению установки. При утвердительном ответе программа установки откроет его, используя программу по умолчанию для данного типа файла. По этой причине файл "README" всегда должен иметь расширение .txt, .wri или .doc.

Обратите внимание, что если программа установки должна будет перезагрузить компьютер (к примеру, в результате установки файла с флагом restartreplace или заданного в секции [Setup] параметра AlwaysRestart со значением yes), то пользователю не будет предоставлена возможность просмотра файла "README".

nocompression

Запрещает компилятору выполнять сжатие файла. Используйте этот флаг для типов файлов, сжатие которых не принесет существенной выгоды в размере инсталлятора (например, изображения в формате JPEG, PNG). Это ускорит процесс компиляции и сэкономит несколько байт в конечном файле установки.

noencryption

Запрещает компилятору выполнять шифрование файла. Используйте этот флаг, если включено шифрование (в секции [Setup] используется параметр Encryption), но вам необходимо извлечь файл (например, при помощи функции ExtractTemporaryFile в секции [Code]) прежде, чем пользователь введёт правильный пароль.

noregerror

В комбинации с любым из флагов regserver или regtypelib инсталлятор не выдаст сообщение о том, что регистрация не состоялась.

onlyifdestfileexists

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

onlyifdoesntexist

Файл с этим флагом будет установлен только в том в случае, если он в системе пользователя не существует.

overwritereadonly

Предписывает программе установки всегда выполнять замену файла с атрибутом "только для чтения". Без этого флага программа установки выдаст пользователю запрос на перезапись такого файла.

promptifolder

По умолчанию, если устанавливаемый файл имеет более раннюю версию (или более раннюю отметку времени, если используется флаг comparetimestamp), чем существующий, то программа установки не будет выполнять его замену. (Смотрите Замечания в конце данной главы.) При использовании этого флага программа установки выдаст пользователю запрос на его замену, но по умолчанию будет предложено оставить существующий файл.

recursesubdirs

Указывает компилятору или программе установки выполнять поиск заданного в Source имени файла/маски также в подкаталогах папки Source.

regserver

Выполняет регистрацию DLL/OCX файла. При указании флага программа установки вызовет функцию DllRegisterServer, экспортируемую DLL/OCX файлом, а перед удалением файла программа деинсталляции вызовет функцию DllUnregisterServer, которая отменит его регистрацию. При использовании этого флага в комбинации с флагом sharedfile регистрация DLL/OCX файла будет отменена только тогда, когда счётчик ссылок общего доступа достигнет нуля.

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

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

regtypelib

Выполняет регистрацию библиотеки типов (.tlb). При удалении файла программа деинсталляции выполнит отмену регистрации библиотеки типов (если только не указан флаг uninsneveruninstall). По аналогии с флагом regserver, при использовании в комбинации с флагом sharedfile регистрация файла будет отменена только тогда, когда счётчик ссылок общего доступа достигнет нуля.

В 64-разрядном режиме установки и запуске на х64-совместимой редакции Windows регистрация библиотеки типов будет выполнена 64-разрядным процессом. Это можно переопределить, указав флаг 32bit.

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

replacesameversion

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

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

restartreplace

Если во время установки необходимо заменить существующий файл, но он в это время используется другим процессом (заблокирован), то программа установки выведет сообщение об ошибке. Вместо этого данный флаг сообщает программе установки зарегистрировать файл для замены при следующем перезапуске системы (путём вызова MoveFileEx или созданием записи в WININIT.INI). В случае возникновения такой ситуации, по окончании установки пользователю будет предложено перезагрузить компьютер.

ПРИМЕЧАНИЕ: если пользователь не имеет прав администратора, этот флаг не учитывается. Поэтому при его использовании рекомендуется для директивы PrivilegesRequired в секции [Setup] оставить значение admin.

setntfscompression

Указывает программе установки включить для файла сжатие NTFS (даже если файл не был заменен). Если по какой-либо причине не удаётся установить состояние сжатия (например, если сжатие не поддерживается файловой системой), сообщение об ошибке не выводится.

sharedfile

Сообщает программе установки, что файл является общим для нескольких приложений, и может быть удалён, если другие приложения больше его не используют. Большинству файлов, устанавливаемых в системный каталог Windows, необходимо указывать этот флаг, в том числе .OCX, .BPL и .DPL файлам.

Для отслеживания числа приложений, которые зависят от файла, в Windows используется стандартный механизм подсчёта ссылок общих файлов (находится в реестре по пути HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs). Каждый раз при установке общего файла счётчик ссылок увеличивается на единицу. (Это происходит независимо от того, действительно ли программа установки производит замену файла на диске.) При удалении приложения, использующего файл, счётчик ссылок автоматически уменьшается. Когда счётчик ссылок достигнет нулевого значения, выполняется удаление файла (если также указан флаг uninsnosharedfileprompt, иначе только с разрешения пользователя).

Если программа установки запускается более одного раза, то на такое же количество раз будет увеличен счётчик ссылок общего доступа для данного файла. При удалении приложения счётчик ссылок будет уменьшен на значение, которое соответствует числу установок, поэтому пропуска в ссылках не будет (при условии, что у директивы UninstallLogMode в секции [Setup] не было изменено заданное по умолчанию значение append).

При использовании этого флага никогда не указывайте константу {syswow64} в параметре DestDir; вместо неё всегда используйте {sys}. Даже несмотря на то, что {sys} и {syswow64} соответствуют одному и тому же каталогу в 32-разрядном режиме установки. Путь всегда должен точно соответствовать тому, который использует другая существующая программа установки, иначе будет создан второй счётчик ссылок, что может привести к преждевременному удалению файла. Если необходимо установить общий файл в 32-разрядный системный каталог в 64-разрядном режиме установки, укажите константу {sys} в параметре DestDir и дополнительно включите флаг 32bit.

sign

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

signcheck

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

signonce

Этот флаг указывает компилятору выполнить цифровую подпись исходных файлов прежде, чем они будут добавлены в пакет установки, но при условии, что они ещё не подписаны. Не учитывается, если параметр SignTool в секции [Setup] не установлен.

skipifsourcedoesntexist

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

solidbreak

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

sortfilesbyextension

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

sortfilesbyname

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

touch

Предписывает программе установки задать установленным файлам отметку времени, указанную в параметрах TouchDate и TouchTime секции [Setup].

В комбинации с флагом external этот флаг не учитывается.

uninsnosharedfileprompt

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

uninsremovereadonly

Указывает программе деинсталляции перед попыткой удалением файла выполнить в нём отключение атрибута "только-для-чтения".

uninsrestartdelete

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

uninsneveruninstall

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

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

unsetntfscompression

Указывает программе установки отключить для файла сжатие NTFS (даже если файл не был заменен). Если по какой-либо причине не удаётся установить состояние сжатия (например, если сжатие не поддерживается файловой системой), сообщение об ошибке не выводится.

Пример:
Flags: isreadme

Параметры секций [Components] и [Tasks]

Общие параметры

Замечания:

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

  1. Если существующий файл имеет более старую версию, чем устанавливаемый файл (в соответствии с информацией о версии файлов), существующий файл будет заменён.
  2. Если существующий файл имеет ту же версию, что и устанавливаемый, он не будет заменён, за исключением случаев, когда используется флаг replacesameversion и содержание этих файлов отличается.
  3. Если существующий файл имеет более новую версию, чем устанавливаемый, или если существующий файл имеет информацию о версии, а устанавливаемый файл нет, существующий файл не будет заменён.
  4. Если существующий файл не имеет информации о версии, он будет заменён.

Некоторые флаги, такие как onlyifdoesntexist, ignoreversion и promptifolder, изменяют вышеупомянутые правила.

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

Все файлы с флагами regserver или regtypelib программа установки регистрирует на последнем этапе инсталляции. Однако, если в секции [Setup] для директивы AlwaysRestart задано значение yes, или если имеются файлы с флагом restartreplace, все эти файлы будут зарегистрированы при следующей перезагрузке системы (путём создания соответствующих записей в ключе RunOnce реестра Windows).

При удалении файлов с расширением .HLP (файлы помощи Windows), автоматически удаляются все связанные с ними файлы .GID и .FTS. Аналогично с файлами .CHM (файлы справки HTML) – при их удалении также автоматически удаляются связанные файлы .CHW (файлы индексации).