Во время копирования файлов посредством INF-скрипта можно переименовывать файлы, то есть указывать не только каталог назначения, но и новое имя файла в каталоге назначения, а также определять поведение интерпретатора флагами копирования во время выполнения процедуры копирования при встрече ошибок. Пример описания этих возможностей дан ниже:
[DefaultInstall]
CopyFiles=cpf.files
[cpf.files]
filenam2.exe,filename.ext,2
Как видно в примере, в дочерней секции копирования в каждой строке через запятую нужно указывать все условия, относящиеся к копированию конкретного файла.
Здесь:
filenam2.exe - имя файла, которое необходимо получить в месте назначения;
filename.ext - старое имя файла, которым он обладает в директории (архиве) дистрибутива;
2 - флаг обработки события, которое наступит, если в месте назначения уже есть файл с таким же именем или же в случае сбоя при копировании.
Все известные значения флагов:
ID | Значение | Описание |
COPYFLG_WARN_IF_SKIP | 0x00000001 | Выводить предупреждающее сообщение, если пользователь пытается пропустить файл после неудачной операции копирования |
COPYFLG_NOSKIP | 0x00000002 | Скрыть кнопку пропуска файла в случае неудачного копирования. Полезно при замене важных системных файлов. |
COPYFLG_NOVERSIONCHECK | 0x00000004 | Не обращать внимание на версию файла, который уже присутствует в месте назначения и всегда перезаписывать файлом из дистрибутива. Не есть хорошо. |
COPYFLG_FORCE_FILE_IN_USE | 0x00000008 | заменить файл в месте назначения, даже если он используется.Теоретически при этом интерпретатор попытается переименовать в случайное мусорное имя использующийся файл, а затем скопирует файл из дистрибутива. |
COPYFLG_NO_OVERWRITE | 0x00000010 | Не копировать файл, если он уже существует. Например, личные настройки в INI-файле некультурно заменять настройками по умолчанию при каждом обновлении программы. |
COPYFLG_NO_VERSION_DIALOG | 0x00000020 | не копировать и не выводить вопросов, если файл в месте назначения уже существует и его версия новее, чем версия файла в дистрибутиве |
COPYFLG_OVERWRITE_OLDER_ONLY | 0x00000040 | Не копировать, если версии совпадают. То есть заменять только старые версии файлов |
COPYFLG_REPLACEONLY | 0x00000400 | Осуществлять операцию копирования только если файл уже существует. Полезно при выпуске обновлений к многочисленным пакетам. |
Как видно из примера, флаги можно записывать и в коротком виде, отбрасывая нули слева. Эти флаги являются составными, то есть в одном флаге можно указать несколько - прибавляя их значения. К примеру, флаг 64 - это флаг, состоящий из трёх флагов - 40, 20 и 4.