[Previous] [Next]

Другие секции, определяющие копирование файлов

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

Секция [SourceDiskNames]

В случае, если файлы, относящиеся к установке драйвера и управляемые данным INF файлом, размещены более чем на одном диске (CD или дискете), то INF файл должен содержать секцию [SourceDisksNames]. Эта секция содержит по одной записи на каждый диск из набора, предлагаемого для установки. Запись имеет вид:

diskid=disk_description[,[tagfile],[неиспользуемое_поле,path][,flags]]

где diskid это уникальное в пределах набора дисков неотрицательное целое число. Как правило, нумерация дисков начинается с 1, хотя возможна и шестнадцатеричная нумерация, например 0x0, 0x1 и т.п.

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

Значение tagfile играет двойную роль. Для уверенности в том, что пользователь предоставил правильный диск во время процесса установки, значение tagfile (имя файла и расширение, путь не указывается) используется для проверки: файл tagfile должен присутствовать на вставленном носителе в корневой инсталляционной директории или в путях path. B случае, если файл на носителе отсутствует, будет выведена строка подсказки, предлагающая пользователю вставить правильный диск (дискету). В случае, если значение tagfile содержит расширение .CAB, в дальнейшем будет полагаться, что этот файл представляет собой набор сжатых (архивированных) файлов в качестве файлов, предназначенных для инсталляции с этого диска.

Поле path является значением пути (относительно инсталляционной директории, то есть где находится интерпретируемый inf-файл) к исходным драйверным файлам на предлагаемом диске. Так же, как и tagfile, значение path является необязательным. В случае, если оно не указано, то полагается, что инсталляционная директория и содержит исходные файлы, относящиеся к установке драйвера.

Поле flags обычно не используется, как и еще одно поле (tag_file), введенное только в Windows XP.

Имя секции [SourceDisksNames] может декорироваться суффиксами версий операционной системы x86 и ia64, так что в inf-файле может быть несколько секций данного типа, отличающихся суффиксами, например:

[SourceDisksNames.x86]
[SourceDisksNames.ia64] 

Секция [SourceDiskFiles]

Инсталляционный inf-файл должен содержать секцию [SourceDiskFiles], в которой перечисляются имена файлов, составляющих предмет инсталляции. Каждый файл представлен одной записью в этой секции в форме:

filename = diskid [, [subdir] [,size] ]

Соответственно, значение diskid указывает диск, введенный в секции [SourceDisksNames], где находится файл filename.

Необязательное для ввода значение subdir указывает путь к этому файлу относительно директории, указанной полем path в соответствующей (по diskid) записи секции [SourceDisksNames]. Если значение path не было там указано, то подразумевается инсталляционная директория (там, откуда взят inf-файл).

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

Практически, значение diskid следует рассматривать всего лишь как идентификатор для построения связки "запись в секции [SourceDiskFiles]" — "запись в секции [SourceDisksNames]", что необходимо системному программному обеспечению, выполняющему установку, для уяснения, откуда следует брать исходные файлы.

Имя секции [SourceDiskFiles] также может декорироваться суффиксами версий операционной системы x86 и ia64.

Секция [DestinationDirs]

Данная обязательная секция INF файла описывает файловый каталог (директорию), в который будет производиться копирование исходных файлов. Без этой секции программа, выполняющая установку драйвера, не будет знать, куда копировать файлы исходных носителей. Записи в секции [DestinationDirs] имеют вид:

file_list_section=dirid[,subdir]

либо

DefaultDestDir=dirid[,subdir]

где file_list_section как раз указывает на секцию типа [CopyFiles], на которую была объявлена ссылка также и в директиве CopyFiles из секции типа [DDInstall] (или [DDInstall.Xxx]).

Это означает, что все файлы, перечисленные в этой "перекрестно ссылаемой" секции типа [CopyFiles], будут скопированы в файловый каталог (директорию), которому присвоен идентификатор dirid. Значение dirid указывает численное значение, за которым стоит достаточно конкретный файловый каталог (директория) назначения. Таблица 12.6 описывает возможные числовые коды dirid и ассоциированные с ними файловые каталоги.

Запись DefaultDestDir=... указывает место, куда будут скопированы файлы, перечисленные в остальных секциях типа [CopyFiles], для которых не было указано в явной форме (записями вида file_list_section=dirid[,subdir]) то место, куда переносить эти файлы.

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

Таблица 12.6. Значения кодов dirid в контексте секции DestinationDirs

Значения Описание
12 %windir%\system32\drivers для Windows 2000/XP/2003
%windir%\system\IoSubsys для Windows 98
10 %windir%\
11 %windir%\system32 для Windows 2000/XP/2003
%windir%\system для Windows 98
30 Корневая директория загрузочного диска
54 Загрузочная (boot) директория Windows 2000/XP/2003
01 Директория данного INF файла
17 Директория INF файлов
20 Директория шрифтов
51 Spool-директория
52 Директория spool-драйверов
55 Директория программ поддержки печати (print processors)
23 Color (ICM)
-1 Полное имя файлового каталога (абсолютный путь)
21

Директория вьюверов (программ просмотра файлов различных форматов — графики, текстов, файлов БД и т.п.)

53 Директория пользовательского лицевого счета (User Profile)
24 Директория размещения приложений
25 Совместно используемая директория
18 Директория файлов-справок (help directory)
16406 All Users\Start Menu
16407 All Users\Start Menu\Programs
16408 All Users\Start Menu\Programs\Startup
16409 All Users\Desktop
16415 All Users\Favorites
16419 All Users\Application Data
16422 Program Files
16427 Program Files\Common
16429 All Users\Templates
16430

All Users\Documents

В секции [DestinationDirs] может быть только одна запись DefaultDestDir=... и много ссылок на секции вида file_list_section=dirid[,subdir].

Примеры описания процедуры копирования файлов

Рассмотрим простейший пример взаимодействия информации, вводимой в секциях, управляющих копированием файлов [SourceDisksNames], [SourceDisksFiles], [DestinatonDirs] и [CopyFiles].

[Manufacturer]
%ThisMfg%=  ModelList ; ссылка на секцию моделей

[ModelList]
"ISA Hammer"=InstallHammer, ISA\Hammer

[InstallHammer]            ; секция инсталляции конкретной модели
CopyFiles=CopyHammerFiles  ; секция CopyFiles
CopyFiles=CopyHammerHelp   ; еще одна секция CopyFiles
AddReg=HammerRegSection    ; ссылка на секцию AddReg

[DestinationDirs]     ; Куда следует выполнять копирование:
DefaultDestDir=12     ; по умолчанию -> %windir%\system32\drivers
CopyHammerHelp=18     ; стандартная директория для help файлов

[CopyHammerFiles]
Hammer.sys      ; <- будет скопирован в директорию dirid=12
[Copy Hammer Help]
Hammer.hlp      ; <- будет скопирован в директорию dirid=18

[SourceDisksNames]
; Подразумевается, что устанавливаемые файлы
; находятся в том же файловом каталоге, что и данный inf-файл.
l="Hammer Driver Files"

[SourceDisksFiles]
Hammer.sys=1; Ссылается на единственную запись в [SourceDisksNames]
Hammer.hlp=1; Ссылается на единственную запись в [SourceDisksNames]

[Strings]
ThisMfg="Big Hammer Manufacturer"

Файл hammer.sys будет скопирован в директорию Windows\Help (Windows XP) или WinNT\Help (Windows 2000) . Немного модифицируем пример: используем в имени секции точку и изменяем направление

[InstallHammer]
CopyFiles=CopyLaunchHelp.Section
. . .
[DestinationDirs]
CopyHammerHelp.Section = -1, C:\Hammer

[CopyHammerHelp.Section]
Hammer.hlp 

От введения суффикса .Section взаимодействие секций не изменяется. Поскольку в секции [DestinationDirs] теперь указано '-1' (абсолютный путь), то файл hammer.hlp будет скопирован в каталог C:\Hammer. В случае, если такой каталог не существует, он будет создан.