INF-файлы

We use cookies. Read the Privacy and Cookie Policy

INF-файлы

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

Как известно, для более-менее серьезного программного продукта обычно требуется специальная программа инсталляции, с помощью которой пользователь сможет легко установить и так же легко удалить сам продукт. Существует много инструментальных средств, позволяющих быстро создавать инсталляционные пакеты. Однако, большинство из них добавляют к исходному размеру программы 200–500 Кб. А ведь это далеко не всегда радует. Серьезный продукт не обязательно должен быть внушительных размеров. И если вы хотите сделать инсталляцию доступной в Сети, то эти 200–500 Кб могут сильно сказаться на популярности продукта.

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

Перейдем к изучению спецификации inf-файлов.

inf-файл представляет собой текстовый файл, который, содержит условия установки программного обеспечения.

Чтобы запустить inf-файл, нужно щелкнуть по нему правой кнопкой мыши и выбрать в открывшемся контекстном меню параметр Установить (Install). Но для подготовки дистрибутива можно воспользоваться IExpress, который поддерживает запуск .inf-файлов. Вооружившись этой программой, а также знанием спецификации .inf-файлов, можно создавать профессиональные инсталляционные пакеты.

Основную информацию в .inf-файле содержат секции, представленные в Таблице 1 (более сложные .inf-файлы могут иметь дополнительные секции).

Секция [Version] обязательно должна включать строку Signature="$Chicago$"

Эта секция определяет стандартный заголовок для всех inf-файлов Microsoft Windows. Если сигнатура будет не $Chicago$, операционная система Windows не примет inf-файл как принадлежащий любому из классов устройств, признанных Windows.

При написании сигнатуры вы можете использовать как верхний, так и нижний регистры букв — $Chicago$ или $CHICAGO$.

Секция установки [DefaultInstall] может содержать следующие параметры:

CopyFiles — копирование файлов;

RenFiles — переименование файлов;

DelFiles — удаление файлов;

UpdateInis — изменение данных в ini-файлах;

UpdateIniFields — изменение областей в .ini-файлах;

AddReg — добавление информации в реестр;

DelReg — удаление информации из реестра;

Ini2Reg — перемещение строки или секции в ini-файлах;

UpdateCfgSys — изменение файла Config.sys;

UpdateAutoBat — изменение файла Autoexec.bat.

Этим параметрам в качестве значения присваивается имя секции с файлами. Например:

[DefaultInstall]

CopyFiles=CopyHtml

[CopyHtml]

Example.html ;файл для копирования...

[DestinationDirs] ;Секция расположения каталогов

DestExampleFiles=10 ;Каталог назначения (т.е. копировать в папку Windows)

Чуть ниже представлены цифровые обозначения специальных папок, применяемые в .inf-файлах:

10 — C:WINDOWS;

11 — C:WINDOWSSystem;

12 — C:WINDOWSSYSTEMIOSUBSYS;

13 — C:WINDOWSCOMMAND;

17 — C:WINDOWSInf;

18 — C:WINDOWSHlp;

20 — C:WINDOWSFONTS;

21 — C:WINDOWSSYSTEMVIEWERS;

22 — C:WINDOWSSYSTEMVMM32;

23 — C:WINDOWSSYSTEMCOLOR;

30 — Корневой загрузочный диск (обычно C:).

Например, если нужно скопировать файл в папку Web, которая находится в каталоге Windows, сделайте это так:

[DestinationDirs]

DestExampleFiles=10,WEB

Так же можно поступить и с другими папками, находящимися в определенных каталогах.

Параметр CopyFiles содержит имя секции, где находятся имена файлов для копирования с исходного диска в папку назначения. Папка назначения определяется в секции [DestinationDirs] inf-файла. В следующем примере копируются два файла:

[Version]

Signature=$Chicago$

[DefaultInstall]

Copyfiles=ExampleCopyFiles ;секция может быть названа как угодно

[SourceDisksNames]

1="Имя диска","",1

;Перечисляете файлы, которые содержатся на диске

[SourceDisksFiles]Example.exe=1

Example.vxd=1

;Перечисляете файлы для копирования (о цифрах через три запятые читайте ниже)

[ExampleCopyFiles]

Example.exe,,,1

Example.vxd,,,1

;Указываете папку, в которую будут копироваться файлы (10 — Windows)

[DestinationDirs]

ExampleCopyFiles=10

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

Параметр CopyFiles может копировать файл непосредственно из строки. Для этого перед именем файла нужно поставить символ @. В следующем примере копируются два текстовых файла:

CopyFiles=@myfile.txt, @anotherfile.txt

Параметр RenFiles содержит секции, которые в свою очередь содержат имена файлов для переименования. Папка, где будет происходить переименование, должна быть определена в секции [DestinationDirs] inf-файла. В следующий примере происходит переименование двух файлов из .bmp в .txt:

[Version]

Signature=$Chicago$

[DefaultInstall]

RenFiles=ExampleRenameOldFiles

[SourceDisksNames]

1="Имя диска","",1

;Перечисляете старые имена файлов

[SourceDisksFiles]

Example1.bmp=1

Example2.bmp=1

;Определяете файлы, которые будут переименовываться

[ExampleRenameOldFiles]

Example1.txt, Example1.bmp

Example2.txt, Example2.bmp

;Указываете папку, в которой будут переименовываться файлы (10 — Windows)

[DestinationDirs]

ExampleRenameOldFiles=10

В параметре AddReg указываются секции, которые содержат информацию о добавлении или изменении ключей, значений в реестре. Следующий пример регистрирует вашу копию операционной системы Windows.

[Version]

Signature=$Chicago$

[DefaultInstall]

AddReg=ExampleAddRegistry

;Определяете информацию, которая будет добавлена в реестр

[ExampleAddRegistry]

HKLM, "SOFTWAREMicrosoftWindowsCurrentVersion", "RegDone",,"1"

HKLM, "SOFTWAREMicrosoftWindowsCurrentVersion WelcomeRegWiz","@",,"1"

С помощью этого файла в реестр добавляется следующая информация:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion

"RegDone"="1"

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionWelcomeRegWiz

"@"="1"

Обратите внимание на запятые в inf-файле. Если нужно добавить в реестр параметр по умолчанию, запятые должны быть проставлены иначе. Например, в рассмотренном нами ключе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion сделаем параметр по умолчанию равным единице (1):

HKLM, "SOFTWAREMicrosoftWindowsCurrentVersion",,,"1"

Ниже представлены корневые имена реестра, применяемые в inf-файлах.

HKCR — HKEY_CLASSES_ROOT;

HKCU — HKEY_CURRENT_USER;

HKLM — HKEY_LOCAL_MACHINE;

HKU — HKEY_USERS;

HKR — относительный ключ, используется классом installer; обычно применяется для дисков устройства.

В параметре DelReg указываются секции, которые содержат информацию об удалении подключей с параметрами и значениями из реестра. Следующий пример демонстрирует удаление подключа Graphviz со всеми параметрами и значениями этого раздела реестра — HKEY_CURRENT_USERSoftwareAT&TGraphviz:

[Version]

Signature=$Chicago$

[DefaultInstall]

DelReg=ExampleDelRegistry

;Определяете информацию, которая будет удалена из реестра

[ExampleDelRegistry]

HKLM, "HKEY_CURRENT_USERSoftwareAT&TGraphviz"

Корневые имена реестра, естественно, обозначаются так же, как и при добавлении информации в реестр.

В процессе установки можно прервать выполнение .inf-файла для показа пользователю какого-нибудь документа (после закрытия которого установка продолжится) или запустить определенный процесс. Следующий пример отображает файл справки About.hlp и текстовый файл About.txt, после чего запускает другой inf-файл — Example.inf:

[Version]

Signature=$Chicago$

[DefaultInstall]

AddReg=ExampleView

;Отображение файла справки About.hlp

[ExampleView]

HKLM,SoftwareMicrosoftWindowsCurrentVersionRunOnceSetup,%ABOUT%,,"WINHLP32.EXE — Main %1%About.hlp"

;Отображение текстового файла About.txt

HKLM,SoftwareMicrosoftWindowsCurrentVersionRunOnceSetup,%ABOUT%,,"notepad %1%About.txt"

;Запуск файла сценария Example.inf

HKLM,SoftwareMicrosoftWindowsCurrentVersionRunOnceSetup,%ABOUT%,,"rundll setupx.dll,InstallHinfSection DefaultInstall 132 %1%Example.inf"

;Определяете название, которое будет отображаться в окне "Установка Windows 98"

[Strings]

ABOUT="О программе..."

После того как определенные в секции [ExampleView] команды выполнятся, записи, добавленные в реестр, будут автоматически удалены из него. Таким образом можно запускать и другие процессы, например апплеты Панели управления:

;Запуск апплета Панели управления Свойства: Система (SYSDM.CPL)

HKLM,SoftwareMicrosoftWindowsCurrentVersionRunOnceSetup,%ABOUT%,,"rundll32

В следующем примере показано, как с помощью inf-файла изменить содержимое ini-файла: 

[Version]

Signature=$Chicago$

[DefaultInstall]

UpdateInis=ExampleAddINIfiles

;Указываете папку, где находится файл system.ini — например в папке Example, которая расположена в каталоге C:Program Files

30,PROGRA~1Example

[DestinationDirs]

ExampleAddINIfiles=30,PROGRA~1Example

;Определяете название файла и секции добавляемых, удаляемых или заменяемых строк

[ExampleAddINIfiles]

;Добавляете в секцию [boot] файла system.ini строку shell=Example.exe

system.ini, boot,, "shell=Example.exe"

;Удаляете из секции [boot] файла system.ini строку shell=Example.exe

system.ini, boot, "shell=Example.exe"

;Заменяете из секции [boot] файла system.ini строку shell=Example.exe на shell=Example8.exe

system.ini, boot, "shell=Example.exe", "shell=Example8.exe"

С помощью inf-файлов можно также создавать/удалять ярлыки в меню Пуск. Ярлык можно создать в уже созданной группе программ. Если таковой не существует, она будет создана автоматически.

Следующий пример создает группу программ Windows + + в меню Пуск > Программы и ярлыки к утилитам winipcfg.exe (Конфигурация IP), Regedit.exe (Редактор реестра) и Winfile.exe (Диспетчер файлов — только в Win98). Все они есть у вас на компьютере и лежат в папке Windows.

[Version]

Signature=$Chicago$

[DefaultInstall]

UpdateInis=ExampleShortcut

;Определяете название и размещение ярлыков

[ExampleShortcut]

setup.ini, progman.groups,, "group1=""Windows + +"""

setup.ini, group1,, """Конфигурация IP"",""""""%30%WINDOWSwinipcfg.exe"""""",,,,""%30%WINDOWS"",""winipcfg.exe"""

setup.ini, progman.groups,, "group1=""Windows + +"""

setup.ini, group1,, """Редактор реестра"",""""""%30%WINDOWSRegedit.exe"""""",,,,""%30%WINDOWS"",""Regedit.exe"""

setup.ini, progman.groups,, "group1=""Windows + +"""

setup.ini, group1,, """Диспетчер файлов"",""""""%30%WINDOWSWinfile.exe"""""",,,,""%30%WINDOWS"",""Winfile.exe"""

Ярлык прописывается в таком порядке:

1. Название группы программ. В нашем случае — Windows + +.

2. Имя ярлыка.

3. Путь к программе, к которой создается ярлык.

4. Рабочий каталог, обычно тот же, что и путь. Некоторые программы не работают, если это условие не выполняется.

5. Имя программы с расширением.

Параметр %30% определяет корневой диск. Если вы хотите создать ярлык к файлу, который находиться в каталоге Program Files, смело прописывайте полный путь (не используйте короткие имена), например %30%Program FilesSetup Generator ProSgpro.exe.

Для удаления ярлыка нужно убрать все записи, указанные после имени ярлыка. В следующем примере удаляется ярлык Конфигурация IP из программной группы Windows + +.

[ExampleShortcut]

setup.ini, progman.groups,, "group1=""Windows + +"""

setup.ini, group1,, """Конфигурация IP"""

Если вы удаляете один из ярлыков программной группы, то удаление не затронет другие ярлыки. Для полного удаления программной группы нужно прописать данное действие для каждого ярлыка.

К сожалению, вы не сможете с помощью inf-файла обычным способом скопировать файлы с длинными именами. Поддержка длинных файловых имен в .inf-файлах немного усложнена, но главное, что она существует. Для этого нужно проделать следующее: исходный файл должен быть с коротким именем, после установки его имя нужно сделать подлиннее. Для удаления процесс повторяется в обратном порядке: длинное файловое имя делается коротким и удаляется уже файл с 8.3-именем. Происходит все это с помощью реестра. Для этих действий в реестре предусмотрены специальные ключи:

Следующий ключ используется для переименования файлов:

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRenameFiles

Этот ключ используется для удаления файлов:

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionDeleteFiles

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

1 — Только для чтения;

2 — Скрытый;

3 — Системный.

Следующий пример демонстрирует переименование в каталоге C:Files файла About.txt в About View files.txt и установление ему атрибута «Скрытый», а также переименование того же файла в подкаталоге Xmp папки C:Files с установлением ему атрибута «Только для чтения»:

[Version]

Signature=$Chicago$

[DefaultInstall]

AddReg=Rename

[Rename]

HKLM,SoftwareMicrosoftWindowsCurrentVersionRenameFiles Example,,,"%30%Files"

HKLM,SoftwareMicrosoftWindowsCurrentVersionRenameFiles  Example,About.txt,,"About View files.txt,2"

HKLM,SoftwareMicrosoftWindowsCurrentVersionRenameFiles SubDir,,,"%30%FilesXmp"

HKLM,SoftwareMicrosoftWindowsCurrentVersionRenameFiles SubDir,About.txt,,"About View files.txt,1"

Ключи для удаления файлов имеют такую же структуру. Рассмотрим пример, который в каталоге C:Files удаляет файл About View files.txt и такой же файл удаляет в подкаталоге Xmp папки C:Files: 

[Version]

Signature=$Chicago$

[DefaultUninstall]

AddReg=Delete

[Delete]

HKLM,SoftwareMicrosoftWindowsCurrentVersionDeleteFiles

Example,,,"%30%Files"

HKLM,SoftwareMicrosoftWindowsCurrentVersionDeleteFiles Example,About.txt,,"About View files.txt"

HKLM,SoftwareMicrosoftWindowsCurrentVersionDeleteFiles SubDir,,,"%30%FilesXmp"

HKLM,SoftwareMicrosoftWindowsCurrentVersionDeleteFiles SubDir,About.txt,,"About View files.txt"

Параметры Example и SubDir могут быть любыми, например названием вашей программы, подкаталога и т.д. Важно, чтобы они были разными, т.к. переименование/удаление происходит в разных каталогах.

Данная статья не претендует на полноту, но надеюсь, поможет читателю освоить inf-файлы хотя бы поверхностно. Не бойтесь экспериментировать, но будьте предельно осторожны, особенно с процессами удаления.