Программы и файлы Windows.
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:\WINDOWS\System;
12 — C:\WINDOWS\SYSTEM\IOSUBSYS;
13 — C:\WINDOWS\COMMAND;
17 — C:\WINDOWS\Inf;
18 — C:\WINDOWS\Hlp;
20 — C:\WINDOWS\FONTS;
21 — C:\WINDOWS\SYSTEM\VIEWERS;
22 — C:\WINDOWS\SYSTEM\VMM32;
23 — C:\WINDOWS\SYSTEM\COLOR;
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, "SOFTWARE\Microsoft\Windows\CurrentVersion", "RegDone",,"1". HKLM, "SOFTWARE\Microsoft\Windows\CurrentVersion\ Welcome\RegWiz","@",,"1".С помощью этого файла в реестр добавляется следующая информация:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion. "RegDone"="1". HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Welcome\RegWiz. "@"="1".Обратите внимание на запятые в inf-файле. Если нужно добавить в реестр параметр по умолчанию, запятые должны быть проставлены иначе. Например, в рассмотренном нами ключе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion сделаем параметр по умолчанию равным единице (1):
HKLM, "SOFTWARE\Microsoft\Windows\CurrentVersion",,,"1".Ниже представлены корневые имена реестра, применяемые в inf-файлах.
HKCR — HKEY_CLASSES_ROOT;
HKCU — HKEY_CURRENT_USER;
HKLM — HKEY_LOCAL_MACHINE;
HKU — HKEY_USERS;
HKR — относительный ключ, используется классом installer; обычно применяется для дисков устройства.
В параметре DelReg указываются секции, которые содержат информацию об удалении подключей с параметрами и значениями из реестра. Следующий пример демонстрирует удаление подключа Graphviz со всеми параметрами и значениями этого раздела реестра — HKEY_CURRENT_USER\Software\AT&T\Graphviz:
[Version]. Signature=$Chicago$ [DefaultInstall]. DelReg=ExampleDelRegistry. ;Определяете информацию, которая будет удалена из реестра. [ExampleDelRegistry]. HKLM, "HKEY_CURRENT_USER\Software\AT&T\Graphviz".Корневые имена реестра, естественно, обозначаются так же, как и при добавлении информации в реестр.
В процессе установки можно прервать выполнение .inf-файла для показа пользователю какого-нибудь документа (после закрытия которого установка продолжится) или запустить определенный процесс. Следующий пример отображает файл справки About.hlp и текстовый файл About.txt, после чего запускает другой inf-файл — Example.inf:
[Version]. Signature=$Chicago$ [DefaultInstall]. AddReg=ExampleView. ;Отображение файла справки About.hlp. [ExampleView]. HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"WINHLP32.EXE — Main %1%\About.hlp". ;Отображение текстового файла About.txt. HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"notepad %1%\About.txt". ;Запуск файла сценария Example.inf. HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"rundll setupx.dll,InstallHinfSection DefaultInstall 132 %1%\Example.inf". ;Определяете название, которое будет отображаться в окне "Установка Windows 98". [Strings]. ABOUT="О программе...".После того как определенные в секции [ExampleView] команды выполнятся, записи, добавленные в реестр, будут автоматически удалены из него. Таким образом можно запускать и другие процессы, например апплеты Панели управления:
;Запуск апплета Панели управления Свойства: Система (SYSDM.CPL). HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"rundll32.В следующем примере показано, как с помощью inf-файла изменить содержимое ini-файла:
[Version]. Signature=$Chicago$ [DefaultInstall]. UpdateInis=ExampleAddINIfiles. ;Указываете папку, где находится файл system.ini — например в папке Example, которая расположена в каталоге C:\Program Files. 30,PROGRA~1\Example. [DestinationDirs]. ExampleAddINIfiles=30,PROGRA~1\Example. ;Определяете название файла и секции добавляемых, удаляемых или заменяемых строк. [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%\WINDOWS\winipcfg.exe"""""",,,,""%30%\WINDOWS"",""winipcfg.exe""". Setup.ini, progman.groups,, "group1=""Windows + +""". Setup.ini, group1,, """Редактор реестра"",""""""%30%\WINDOWS\Regedit.exe"""""",,,,""%30%\WINDOWS"",""Regedit.exe""". Setup.ini, progman.groups,, "group1=""Windows + +""". Setup.ini, group1,, """Диспетчер файлов"",""""""%30%\WINDOWS\Winfile.exe"""""",,,,""%30%\WINDOWS"",""Winfile.exe""".Ярлык прописывается в таком порядке:
1. Название группы программ. В нашем случае — Windows + +.
2. Имя ярлыка.
3. Путь к программе, к которой создается ярлык.
4. Рабочий каталог, обычно тот же, что и путь. Некоторые программы не работают, если это условие не выполняется.
5. Имя программы с расширением.
Параметр %30%\ определяет корневой диск. Если вы хотите создать ярлык к файлу, который находиться в каталоге Program Files, смело прописывайте полный путь (не используйте короткие имена), например %30%\Program Files\Setup Generator Pro\Sgpro.exe.
Для удаления ярлыка нужно убрать все записи, указанные после имени ярлыка. В следующем примере удаляется ярлык Конфигурация IP из программной группы Windows + +.
[ExampleShortcut]. Setup.ini, progman.groups,, "group1=""Windows + +""". Setup.ini, group1,, """Конфигурация IP""".Если вы удаляете один из ярлыков программной группы, то удаление не затронет другие ярлыки. Для полного удаления программной группы нужно прописать данное действие для каждого ярлыка.
К сожалению, вы не сможете с помощью inf-файла обычным способом скопировать файлы с длинными именами. Поддержка длинных файловых имен в .inf-файлах немного усложнена, но главное, что она существует. Для этого нужно проделать следующее: исходный файл должен быть с коротким именем, после установки его имя нужно сделать подлиннее. Для удаления процесс повторяется в обратном порядке: длинное файловое имя делается коротким и удаляется уже файл с 8.3-именем. Происходит все это с помощью реестра. Для этих действий в реестре предусмотрены специальные ключи:
Следующий ключ используется для переименования файлов: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RenameFiles. Этот ключ используется для удаления файлов: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DeleteFiles.Для действий переименования или удаления нужно добавить подключ с любым именем в соответствующую ветвь реестра. Минимум два ключа должны быть определены. Первый ключ содержит имя каталога, где будет происходить переименование или удаление файлов. Следующий ключ содержит имена файлов: первое — короткое, второе — длинное и его атрибуты, если нужно:
1 — Только для чтения;
2 — Скрытый;
3 — Системный.
Следующий пример демонстрирует переименование в каталоге C:\Files файла About.txt в About View files.txt и установление ему атрибута «Скрытый», а также переименование того же файла в подкаталоге Xmp папки C:\Files с установлением ему атрибута «Только для чтения»:
[Version]. Signature=$Chicago$ [DefaultInstall]. AddReg=Rename. [Rename]. HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles \Example,,,"%30%\Files". HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles \Example,About.txt,,"About View files.txt,2". HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles \SubDir,,,"%30%\Files\Xmp". HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles \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,Software\Microsoft\Windows\CurrentVersion\DeleteFiles. \Example,,,"%30%\Files". HKLM,Software\Microsoft\Windows\CurrentVersion\DeleteFiles \Example,About.txt,,"About View files.txt". HKLM,Software\Microsoft\Windows\CurrentVersion\DeleteFiles \SubDir,,,"%30%\Files\Xmp". HKLM,Software\Microsoft\Windows\CurrentVersion\DeleteFiles \SubDir,About.txt,,"About View files.txt".Параметры Example и SubDir могут быть любыми, например названием вашей программы, подкаталога и т.д. Важно, чтобы они были разными, т.к. переименование/удаление происходит в разных каталогах.
Данная статья не претендует на полноту, но надеюсь, поможет читателю освоить inf-файлы хотя бы поверхностно. Не бойтесь экспериментировать, но будьте предельно осторожны, особенно с процессами удаления.
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.