Работа с диалогом Установка и удаление программ

Работа с диалогом Установка и удаление программ

Одной из интересных возможностей 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"