Работа с диалогом Установка и удаление программ
Работа с диалогом Установка и удаление программ
Одной из интересных возможностей INF-файлов является возможность их использования как для добавления команды в диалог Установка и удаление программ, так и для выполнения процесса деинсталляции при помощи диалога Установка и удаление программ. Рассмотрим простой пример использования INF-файлов для создания так называемого зацикленного элемента диалога Установка и удаление программ, который применяется для включения и отключения возможности автоматического запуска дисков. Принцип работы приведенного ниже сценария прост. При первом своем вызове он копирует себя в папку %systemroot%INF, отключает автоматический запуск дисков, а также добавляет возможность включения автоматического запуска дисков в диалог Установка и удаление программ. После удаления данного INF-файла с помощью диалога Установка и удаление программ происходит включение автоматического запуска дисков, а также создание в диалоге Установка и удаление программ новой строки, с помощью которой можно опять отключить автоматический запуск диска. Другими словами, создается постоянный цикл. Конечно, пример с изменением значения одного параметра довольно спорен, ведь намного проще было бы добавить свой флажок в один из стандартных диалогов Windows, поддерживающих добавление в свои списки новых элементов. Но если необходимо при установке параметра также выполнять какие-либо команды или модифицировать сразу несколько параметров (например, создать несколько разновидностей настройки оболочки Windows, а потом переходить между ними), то данный способ использования INF-файлов может быть незаменим (рис. 15.1).
Рис. 15.1. Создание команды в диалоге Установка и удаление программ
Листинг 15.12. Создание цикла в диалоге Установка и удаление программ
[version]
Signature = $CHICAGO$
[DefaultInstall]
AddReg = AutoRunOff, InstallInf
CopyFiles = INFcopy
;Ниже мы используем переменную %PATH% для указания изменяемой ветви реестра.
;Переменная – это специальная последовательность символов, которая при
;установке INF-файла будет преобразовываться в строку, определенную для нее
;в стандартном блоке [Strings] (обычно этот блок располагается в самом низу
;INF-файла). Использование переменных позволяет улучшить читабельность
;INF-файлов большого размера, а также предоставляет разработчику возможность
;цетрализованного хранения всех информационных и других строчек программы.
;Иными словами, вместо того чтобы искать необходимую для изменения строку
;по всему содержимому INF-файла, он может описать ее в блоке [Strings]
[AutoRunOff]
HKLM, %PATH%, AutoRun, 0x00010001, 0
;Добавляем строку в диалог Установкаудаление программ. В первой главе
;мы кратко рассматривали формат этого диалога.
[InstallInf]
HKLM, %DISPLAY% autorunOnOff,,,
HKLM, %DISPLAY% autorunOnOff, DisplayName,,%NAME_ON%
HKLM, %DISPLAY% autorunOnOff, UninstallString,,"rundll32 setupapi, InstallHINFSection DefaultUninstall 132 %17%primer.INF"
[DefaultUninstall]
AddReg = AutoRunOn
[AutoRunOn]
HKLM, %PATH%, AutoRun, 0x00010001, 1
HKLM, %DISPLAY% autorunOnOff, DisplayName,,%NAME_OFF%
HKLM, %DISPLAY% autorunOnOff, UninstallString,,"rundll32 setupapi, InstallHINFSection DefaultInstall 132 %17%primer.INF"
[INFcopy]
primer.INF
[DestinationDirs]
INFcopy = 17
[SourceDisksFiles]
primer.INF = 55
[SourceDisksNames]
55 = %DISKNAME%, , 1
;Описывает переменные, используемые в INF-файле
[Strings]
PATH = "SYSTEMCurrentControlSetServicesCdrom"
DISPLAY = "SOFTWAREMicrosoftWindowsCurrentVersionUninstall"
NAME_ON = "Восстановить автоматический запуск дисков"
NAME_OFF="Отключить автоматический запуск дисков"
DISKNAME = "parad0x-des1Gn"