KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программное обеспечение » Роман Клименко - Недокументированные и малоизвестные возможности Windows XP

Роман Клименко - Недокументированные и малоизвестные возможности Windows XP

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Роман Клименко, "Недокументированные и малоизвестные возможности Windows XP" бесплатно, без регистрации.
Перейти на страницу:

Для удаления службы предназначено ключевое слово DelService, которое также указывается в блоке, названном в формате [«блок удаления».Services]. Удаление службы выполняется намного проще — просто указывается имя службы, которую нужно удалить (название раздела реестра, в котором служба описана).

Листинг 15.6. Пример удаления службы

[version]

Signature="$CHICAGO$"


[Uninstall.Services]

DelService=sr

В листинге 15.6 ключевое слово DelService указано в блоке [Uninstall.Services], так как именно блок [Uninstall] используется в примере при вызове INF-файла для удаления службы с помощью команды rundll32.exe.

Копирование файлов

Копирование в INF-файлах реализовано наиболее сложно. Для его выполнения необходимо не только использовать ключевое слово CopyFiles, но и, кроме того, создать три отдельных блока INF-файла: DestinationDirs, SourceDisksFiles и SourceDisksNames. Рассмотрим простой пример. 

Листинг 15.7. Копирование файлов

[version]

Signature = $CHICAGO$


[DefaultInstall]

CopyFiles = INFcopy


[INFcopy]

1.INF


[DestinationDirs]

INFcopy = 17


[SourceDisksFiles]

1.INF = 55


[SourceDisksNames]

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

В этом примере для описания копируемых файлов используется блок INF-файла [INFcopy]. Ссылка на него содержится в ключевом слове CopyFiles. В этом блоке находятся только названия файлов, которые должны быть скопированы (если файлов несколько, каждый из них пишется в отдельной строке). Кроме блока [INFcopy], файл обязательно должен хранить и три других стандартных блока INF-файлов.

Блок [DestinationDirs] определяет каталоги, в которые должны копироваться файлы, описанные в отдельных блоках INF-файла, предназначенных для описания копируемых файлов. При этом все файлы, описанные в одном блоке INF-файла, должны копироваться только в один каталог (то есть если бы в нашем блоке [INFcopy] описывалось два файла, например 1.INF и 2.INF, то они оба должны были бы скопироваться в один каталог). Формат определения каталога, в который будут копироваться файлы, следующий:

«блок описания копируемых файлов»=«числовой номер каталога»,«дальнейший путь к каталогу»

Числовой номер каталога представляет собой число, идентифицирующее одну из системных папок. Рассмотрим некоторые из этих чисел, а также каталоги, которые они определяют.

■ 10 — %systemroot%.

■ 11 — %systemroot%system32.

■ 17 — %systemroot%Inf.

■ 53 — %userprofile%.

■ 54 — %systemdrive%.

■ 1 — говорит о том, что необходимо использовать абсолютный путь, который должен быть записан после числового номера (через запятую). Абсолютным называется путь, который не начинается с числового номера каталога. Например, числовым является путь d:test1.

С помощью блока [SourceDisksFiles] осуществляется присваивание каждому копируемому файлу уникального идентификатора, он будет определять в блоке [SourceDisksNames] название диска, с которого копируется файл. Формат строк этого блока следующий:

«название копируемого файла»=«уникальный идентификатор диска, на котором находится этот файл»

Блок [SourceDisksNames] определяет диски, на которых находятся копируемые файлы. Формат строк этого блока таков:

«уникальный идентификатор диска»=«имя диска»,«метка диска»,«серийный номер диска» 

Метка диска отображается в диалоге копирования файлов. Эта метка также отображается в диалоге, выводимом, если система не может найти указанные для копирования файлы. В этом случае система попросит вас вставить диск, название которого как раз и указано в блоке [SourceDisksNames].

Удаление файлов

Удаление файлов напоминает их копирование, поэтому рассмотрим этот процесс лишь поверхностно — в подсказках к листингу 15.8. Для определения блоков, содержащих описания удаляемых файлов, используется ключевое слово DelFiles.

Листинг 15.8. Удаление файлов

[version]

Signature = $CHICAGO$


;данный раздел будет вызываться с помощьюкоманды rundll32

[DefaultUninstall]

DelFiles = INFdel


;мы будем удалять файл vfolder.INF

[INFdel]

vfolder.INF

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

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

[DestinationDirs]

INFdel = 17


[SourceDisksFiles]

vfolder.INF = 55


[SourceDisksNames]

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

Создание ярлыка файл в меню Пуск

Это еще одна возможность, которой можно воспользоваться благодаря INF-файлу. С помощью ключевого слова ProfileItems можно определить блок INF файла, в котором описывается создаваемый в меню Пуск ярлык. Рассмотрим пример, с помощью которого создается ярлык программы Восстановление системы в меню Пуск (Стандартные►Служебные).

Листинг 15.9. Создание ярлыка

[version]

Signature="$CHICAGO$"


[DefaultInstall]

ProfileItems=SRProfile


[SRProfile]

Name="Восстановление системы"

CmdLine=11,restore,rstrui.exe

SubDir="СтандартныеСлужебные"

InfoTip="Это подсказка, отображаемая при наведении указателя на ярлык"

DisplayResource="%systemroot%system32restorerstrui.exe",2048

ProfileItems=SRProfile

Блок для описания ярлыка в меню Пуск может содержать следующие ключевые слова.

■ Name — определяет название создаваемого в меню Пуск ярлыка.

■ CmdLine — указывает путь к программе, для которой создается ярлык. Формат данного ключевого слова немного необычен: «числовой путь к стандартному каталогу, размещение файла, название файла».

■ SubDir — определяет расположение ярлыка в меню Пуск. Если точнее, то данное ключевое слово определяет дальнейший путь к каталогу, который будет содержать ярлык на программу. Дальнейший путь добавляется к пути %systemdrive%Documents and SettingsAll UsersГлавное менюПрограммы.

■ WorkingDir — указывает рабочие каталоги для программы, на которую создается ярлык (как правило, это ключевое слово не указывается).

■ InfoTip — определяет подсказку, отображаемую при наведении указателя на созданный в меню Пуск ярлык.

Расширенные INF-файлы

Расширенные INFфайлы отличаются от обычных одной строкой, которую нужно добавить в блок [version]. Ниже приведен пример блока версии для расширенного INF-файла.

[Version]

Signature="$CHICAGO$"

AdvancedINF=2.5,"Эта строка будет выводиться, если на компьютере не найдено библиотеки advpack.dll"

Для работы с расширенными INFфайлами необходима библиотека advpack.dll, по умолчанию расположенная в каталоге %systemroot%. Если перед началом выполнения расширенного INFфайла система не найдет данной библиотеки, то она выведет сообщение, указанное в ключевом слове AdvancedINF после запятой. К тому же, как известно, расширенные INFфайлы вызываются с помощью команды rundll32.exe ADVPACK.dll, LaunchINFSectionEx «имя файла», «имя раздела», «имя cab-файла», «флаг». Тогда как обычные INF-файлы вызываются с помощью следующей команды: rundll32.exe setupapi.dll, InstallHINFSection «раздел в файле для начала установки», «флаг», «путь и имя файла».

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

Расширенные INF-файлы поддерживают такую возможность, как запуск команд перед установкой INF-файла или после нее. При этом для указания блока, описывающего программы, запускаемые перед установкой INF-файла, используется ключевое слово RunPreSetupCommands. Для указания блока, описывающего программы, запускаемые после установки INF-файла, используется ключевое слово RunPostSetupCommands. Посмотрим на пример использования этих ключевых слов.

Листинг 15.10. Запуск программ до и после установки INF-файла

[version]

Signature = $CHICAGO$

AdvancedINF=2.5,"Эта строка будет выводиться, если на компьютере не найдено библиотеки advpack.dll"


[DefaultInstall]

RunPreSetupCommands=RunPre

RunPostSetupCommands=RunPost


[RunPre]

calc.exe

cmd.exe


[RunPost]

"rundll32.exe IEAKENG.dll, DoReboot"

Приведенный в листинге 15.10 INF-файл перед своей установкой вызывает Калькулятор, а потом — стандартный командный интерпретатор Windows. После своей установки он вызовет диалоговое окно с вопросом о перезагрузке компьютера. Конечно, это окно принадлежит Internet Explorer, но зато оно работает.

ПРИМЕЧАНИЕ

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*