Бродя по темным закоулкам Technet и просматривая одним глазом DDK и SDK KIT для Win98, я наткнулся на описание загадочной секции, использующейся для установки через sysoc.inf. Я подозревал, что это штатная секция INF-файлов, просто не сильно афишировавшаяся. Итак, подробнее об этой секции.
Синтаксис:
[Optional Components]
Имя секции - ссылка на секцию в файле, которую надо исполнить для установки
.....
[Имя секции] - сама установочная секция
Данная секция служит для добавления устанавливаемого приложения в список оснастки "Установка/Удаление программ - Компоненты Windows". Секция не будет исполнена при попытке выполнить файл по правому щелчку мышью и выбору пункта "Установить". Ее также нельзя выполнить с помощью команды [Setupx.dll InstallHinfSection точка_входа]. В первом случае будет выполнятся секция [DefaultInstall], a во втором секция - указанная точкой входа. В обоих случаях параметры секции [Optional Components] будут игнорированны.
Насколько я понимаю, для обработки дополнительных инструкций секции [Optional Components] и существуют файлы sysoc.inf, ocgen.dll и sysocmgr.exe. В основном инструкции [Optional Components] служат для управления отображения компонентов в окне "Компоненты Windows".
Вернемся к синтаксису. В секцию установки могут быть добавлены следующие инструкции OC:
OptionDesc=название дополнительного компонента
Tip=Подсказка в поле "Описание".
InstallDefault=0 | 1 ; Устанавливать компонент по умолчанию. 1=Да, 0=Нет.
IconIndex=Номер иконки для отображения
Parent= (имя секции\группы) группа или подгруппа в "Компоненты Windows" (Пример: "Игры Windows" относятся к Parent=AccessUtil, аддоны 3dParty к Parent=NonMS)
Needs=имя секции, имя секции
Include=INF-файл, [INF-файл]
OptionDesc - это строковой параметр задающий название дополнительного компонента отображающегося в "Компоненты Windows". Может быть задан через Strings.
Tip - это текст подсказки в поле "Описание", ограничение - 255 символов.
Может быть задан через Strings.
IconIndex - это иконка, которая будет отображатся рядом с названием компонента. Привожу список иконок в оригинале:
0 Machine (base and display)
1 Integrated circuit chip
2 Display
3 Network wires
4 Windows flag
5 Mouse
6 Keyboard (3 keys)
7 Phone
8 Speaker
9 Hard disks
10 Comm connector
11 Diamond (default value)
12 Checked box
13 Un-checked box
14 Printer
15 Net card
16 Same as 0
17 Same as 0 w/ a sharing hand underneath
18 Unknown (question mark)
19 Atwork
20 Greyed check box
21 Dial-up networking
22 Direct cable connection
23 Briefcase
24 Exchange
25 Partial check
26 Accessories group
27 Multimedia group
28 Quick View
29 MSN
30 Calculator
31 Defrag
32 Generic document
33 DriveSpace
34 Solitaire
35 HyperTerminal
36 Object Packager
37 Paint
38 Screen saver
39 WordPad
40 Clipboard Viewer
41 Accessibility
42 Backup
43 Bitmap document
44 Character map
45 Mouse pointers
46 Net Watcher
47 Phone Dialer
48 System Monitor
49 Help book
50 Globe (international settings)
51 Audio compression
52 CD player
53 Media Player
54 Sound scheme
55 Video clip
56 Video compression
57 Volume control
58 Musica sound scheme
59 Jungle sound scheme
60 Robotz sound scheme
61 Utopia sound scheme
Parent - это инструкция, указывающая, является компонент подчиненным или родительским. Если параметр отсутствует, то менеджер дополнительных компонентов считает что компонент родительский. Если указать несуществующий родительский компонент (например, сам аддон), менеджер компонентов зависнет в попытке найти такого родителя. Для всех авторов аддонов должен быть только один вариант - Parent=NonMS (аддон 3dParty), чтобы не загромождать менеджер дополнительных компонентов (конечно, кроме особых случаев).
Needs указывает на секцию другого дополнительного компонента, от которого зависит устанваливаемый компонент. Секция должна быть в этом же файле, в противном случае
необходимо использовать Include.
Include присоединяет INF-файл стороннего компонента к текущей установке, что позволяет ссылатся на секции в присоединенном файле.
InstallDefault, скорее всего, достался в наследство от Win98. Я пробовал ставить аддон с этим параметром = 1 вместо Modes= 0,1,2,3. Аддон не поставился, но в списке
компонентов появился и позволил доустановить себя. У кого получится установить - сообщите. Пока могу посоветовать использовать Modes=0,1,2,3.
Пример:
[Optional Components]
InstallMyToys
InstallGames
[InstallMyToys]
OptionDesc=%Toys_DESC%
Tip=%Tomytoysys_TIP%
IconIndex=35 ;Иконка "Телефон"
Parent=MailApps
Needs=MSMAIL, MAPI, MicrosoftNetwork
Include=mos.inf, msmail.inf
CopyFiles=MyToysFiles
UpdateInis=MyToysLinks
AddReg=MyToysRegItems
[InstallOtherApps]
OptionDesc=%Other_DESC%
Tip=%Other_TIP%
IconIndex=4 ;windows mini icon for dialogs
CopyFiles=OtherFiles
UpdateInis=OtherLinks
AddReg=OtherRegItems
[Strings]
Toys_DESC="Почтовая утилита"
Toys_TIP="Дополнительные почтовые инструменты"
Other_DESC="Другие полезные утилиты"
Other_TIP="Калькулятор, очистка диска и монитор производительности"