Для успешного копирования файла необходимо знать три вещи: куда, что и откуда. Куда - это содержимое секции [DestinationDirs] и, может быть, ещё её помощника параметра CustomDestination. Что - это содержимое дочерних секций, содержащих имена файлов. Откуда - это содержимое секций [SourceDisksFiles] и [SourceDisksNames]. Объекты "куда" и "что" связаны между собой одинаковыми именами дочерних секций. То есть, исходя из того, что вся дочерняя секция может быть скопирована только в один каталог, логично то, что у дочерней секции всего один пункт назначения и, следовательно, ей принадлежит один параметр в секции [DestinationDirs]. Далее, объекты "что" и "откуда" связаны между собой именами файлов, значит, файл, присутствующий в операции перемещения (дочерней секции), обязан быть указанным в источнике [SourceDisksFiles]. Для облегчения понимания этих связей пример:
[DefaultInstall]
CopyFiles=cpf.test
[cpf.test]
filename.ext
[DestinationDirs]
cpf.test=-1, C:\Temp
[SourceDisksFiles]
filename.ext=1
[SourceDisksNames]
1="TEST CD","",0
В этом простом примере копируется файл filename.ext в каталог C:\Temp. Если необходимо скопировать несколько файлов в директорию C:\Temp, их нужно дописать в двух секциях: дочерней секции [cpf.test] и в секции "Откуда" - [SourceDisksFiles]. Если следующий файл необходимо будет копировать в другую директорию, для него придётся создавать новую дочернюю секцию, добавлять её к первой в параметре CopyFiles и указывать для неё новый каталог назначения [DestinationDirs]. В месте "Откуда" (дистрибутив) файлы могут находиться в разных подкаталогах и\или cab-архивах. За это отвечает секция [SourceDisksNames]. Она содержит пронумерованные дистрибутивные пути, причём каждый путь может указывать одновременно и на отдельный диск, и на отдельную директорию и на отдельный cab-архив. Формат записи дистрибутивных секций:
[SourceDisksNames]
1 = "Drive_Name","data1.cab",subdir
2 = "Drive_Name 2","",0
где:
1 - переменная дистрибутивного пути,
"Drive_Name" - имя диска (label),
"data1.cab" - cabinet-архив на диске "Drive_Name", содержащий файлы, предназначенные для копирования (допускается указывать имя файла cab-архива без расширения),
subdir - Поддиректория на диске "Drive_Name",
содержащая файл "data1.cab". Во второй строке указано лишь имя диска, имя файла cab-архива оставлено пустым, а поддиректория равна нулю. Более традиционным считается ставить для текущей директории знак точки - ".", однако, скорее всего, у Microsoft проблемы с синтаксисом и, кроме того, постоянные нарушения неписанных стандартов. Далее:
[SourceDisksFiles]
filename.ext = 1
filenam1.ext = 1
filenam2.ext = 2
Если предположить, что все три указанных файла указаны в одной дочерней секции копирования, однако, как указано выше, находятся на разных сменных дисках - первые два на диске с меткой "Drive_Name", а третий - на диске "Drive_Name2", то в процессе копирования будет показан диалог с требованием сменить диск для продолжения операции копирования или указать другой путь к диску: