Войти

Показать полную графическую версию : Руководство по созданию аддонов (текущая версия)


Страниц : 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

Drinko
07-03-2008, 04:50
volk1234,
Вот более точная информация по этапам установки:

Первый этап в текстовом режиме:

1. Запуск загрузчика установочного диска boot/ntboot.bin.
2. Запуск i386/bootfix.bin.
3. Запуск i386/setupldr.bi.
4. Чтение и интерпретация i386/txtsetup.sif, i386/winnt.sif и других *.sif.
5. Загрузка драйверов оборудования.
6. Запуск system32/ntdll.dll и system32/smss.exe.
7. Копирование файлов с дистрибутивного диска.
8. Обновление hive*.inf в реестр.
9. Перезагрузка.

Второй этап продолжается в графическом режиме.

1. 39 минут – запуск setup.exe/syssetup.dll (syssetup.inf).
2. Загрузка nt5.cat и *.cat.
3. Выполнение *.inf.
4. Запуск ocmanage.dll.
5. Определение оборудования (machine.inf).
6. 37 минут – установка драйверов устройств.
7. Запуск intl.cpl (intl.inf).
8. Запрос CD-KEY.
9. Установка компонентов ОС (sysoc.inf).
10. 32 минуты – установка поддержки сети.
11. 29 минут – копирование всех необходимых файлов ОС.
12. 25 минут – завершение установки.
13. 22 минуты – установка меню «Пуск» (shell.inf).
14. 18 минут – регистрация компонентов (OLE regsrv).
15. 13 минут – запуск $OEM$/Cmdlines.txt.
16. 9 минут – сохранение параметров.
17. 8 минут – сохранение настроек (sfc.dll сканирует все системные файлы для создания базы WFP).
18. Создание signhash Hardware ID.
19. Удаление временных файлов.
20. Перезагрузка.

Третий этап продолжается в графическом режиме:

1. Включение oobeinfo, активация копии системы.
2. Добавление пользовательских бюджетов.
3. Применение установок.
4. Настройка пользовательских профилей.
5. Запуск команд из секции GuiRunOnce.
6. Загрузка рабочего десктопа.

volk1234
07-03-2008, 11:29
Drinko,
пропустили в п 13-17
(по вашей же ссылке)
4.Setup installs Start menu items and makes changes to the registry.

5. Setup sets file and folder permissions to protect the new operating system, for example, for files in the root directory, the system root folder, and the registry.

volk1234
08-03-2008, 00:15
Чуток подкорректировал статью про txtsetup
в варианте gosh небыло флагов.
Добавил флаги копирования в шаблон.
Добавил неизвестный параметр, скорее всего тоже флаг.(1,,,,,,,20,0,0,newname,4,22)

IDDQDesnik
08-03-2008, 16:41
Народ! нет аддонов SYSOS, есть SYSOС и файл называется sysoc.inf поправьте статью

volk1234
08-03-2008, 17:13
IDDQDesnik
Исправил 2 опечатки

Anakin
09-03-2008, 14:04
Vadikan, вы планируете включить в учебник по автоустановке новый материал о процессе по минтуам, который предоставил Drinko?

Vadikan
10-03-2008, 18:33
Vadikan, вы планируете включить в учебник по автоустановке новый материал о процессе по минтуам, который предоставил Drinko? »
Где? Я не читаю все темы и сообщения форума. Еще раз повторяю, все предложения по улучшению сайта/оффлайн версии следует направлять в тему Оффлайн версия сайта (6.0) (http://forum.oszone.net/thread-49076.html)

Vadikan
10-03-2008, 19:48
Вот более точная информация по этапам установки: »
В списке не указано, на каком этапе выполняются команды из svcpack.inf.

volk1234
18-03-2008, 00:43
Обновлена инструкция. ( http://forum.oszone.net/post-749397-343.html)
+Мелкие исправлния
+Файл Sysoc.inf. Собрал что смог. Размещена в этом посте, поскольку в тот уже не влазит :)
+Сделал учебный аддон для "чайников" с описанием. В следующем посте (http://forum.oszone.net/post-762548-474.html)


Файл Sysoc.inf


SYSOC.INF

Здесь немногое что удалось собрать.
Sysoc - System Optional Components - диспетчер установки дополнительных компонентов ОС.
В процессе выполнения программы установки выполняется файл sysoc.inf, посредством библиотеки ocgen.dll и других.
Состоит в основном из секций [Components] где указываются устанавливаемые дополнительные компоненты.

Синтаксис:
WGA= ocgen.dll, OcEntry, Pck_WGA.inf, HIDE, 7

WGA- имя исполняемой секции
ocgen.dll- библиотека обработчик sysoc
OcEntry- команда ocgen.dll (нечто вроде точки входа)
Pck_WGA.inf- название inf файла устанавливаемого компонента
Hide- скрыть компонент
7- флаг (неизвестно) для ocgen.dll всегда равен 7

-Для интеграции установки через Sysoc в ваш inf-файл необходимо добавить секцию:

[Optional Components]
Имя исполняемой секции


-Для размещения вашего приложения устанавливаемого через Sysoc в группе 3rdParty (Программы сторонних разработчиков)
добавьте в исполняемую сециюParent=NonMS и удалите из Sysoc параметр HIDE.
[/CODE]

-Параметр Modes=0,1,2,3
точное значение не известно, однако разместить его в исполняемой секции можно 2 способами:

Modes=0,1,2,3 ;аддон будет установлен по умолчанию
;Modes=0,1,2,3 ;аддон не будет установлен по умолчанию, его доустановка возможна из "Установки компонентов Windows"


Без параметра Modes аддон не будет установлен.

volk1234
18-03-2008, 01:17
Пример создания аддона из утилиты Netlook (для начинающих)

Для примера я выбрал программку Netlook. Причина: желание совместить приятное с полезным, такого аддона еще нет, программка не очень большая,записей в реестр не делает(то есть практически портэйбл), и лично мне пригодится.
Сознательно не использовались средства автоматизации создания аддона (смотрите во втором примере), дабы пример был более наглядным.
Аддон можно скачать здесь (http://forum.oszone.net/thread-103040.html ) и подробно изучить.

Этап один.

После изучения структуры самой программки, я скопировал ее в отдельную папку для экспериментов и распотрошил, извлек все файлы в одну папку. Их оказалось не много не мало, 32 штуки.
Наступило время создать inf файл собственно. Создаем заголовок.

[Version]
Signature="$WINDOWS NT$"
SetupClass=BASE


WINDOWS NT стоит использовать вместо CHICAGO, мы же не делаем аддон для win95? Кроме указания на базовый класс установки больше в заголовке ничего не пишем, пока и не нужно.
Затем создаем самую главную секцию нашего inf-файла - исполняемую

[DefaultInstall]
CopyFiles=CopyMain, CopyConfig, CopyHelp, CopyHist, CopyLang, CopySkin, CopySound, CopyTools, CopyInf, RenToolsLang
ProfileItems=NL.AddShortcut


Эта секция не обязательно должна иметь такое скучное имя, но поверьте от того, что она есть вам хуже не будет.
Разбираем по строчкам: CopyFiles копирует файлы попутно создавая нужные папки, ProfileItems добавляет ярлык программы. В моем случае ( хороший стиль написания inf-файла :) ) я воспользовался уже кем-то созданной папкой по адресу Пуск\Все программы\Утилиты.
Вроде, все выглядит просто. Но, для того чтобы создать секции копирования, которые так красиво смотрятся в строке CopyFiles=, придется попотеть- создать все эти секции с перечислением файлов вручную. Вам никто не мешает проявить смекалку и используя специальные утилитки получить на руки в текстовом виде список файлов из папки куда вы их "распотрошили".
Секции я поименовал в соответствии с названием папок аддона Copymain - корневая и тд.
Далее прописываем будущую структуру папок в секции [DestinationDirs]
Не буду вас утомлять просто приведу ее

[DestinationDirs]
CopyMain=16422, "Netlook"
CopyConfig=16422, "Netlook\Config"
CopyHelp=16422,"Netlook\Help"
CopyLang=16422,"Netlook\Languages"
CopySkin=16422,"Netlook\Skin"
CopySound=16422,"Netlook\Sound"
CopyTools=16422,"Netlook\Tools\Configurator"
RenToolsLang=16422,"Netlook\Tools\Configurator\Languages"


Здесь поясню почему так называется последняя секция. Оказалось, что создатель программы Netlook, ничего не слышал про хороший стиль программирования и присвоил двум файлам в своей программе одинаковое имя. Вот и пришлось один из них переименовать (файлы то лежат вместе), с тем чтобы далее, в секции RenToolsLang при копировании в отдельную папку вернуть все обратно.
[RenToolsLang]
"russian.lng",russian2.lng,,4

И последняя секция, указывающая откуда копировать [SourceDisksNames]. Я запаковал все файлы из одной папки в cab-архив с
гордым именем netlook.cab и прописал его в inf-файле:

[SourceDisksNames]
1="NetLook Files","netlook.cab",0

Создал секцию добавления ярлыка:

[NL.AddShortcut]
Name= "Netlook 2.3"
CmdLine= 16422,"Netlook",NetLook.exe
WorkingDir= 16422,"Netlook"
SubDir= "Утилиты"
Infotip= "Netlook 2.3"


Второй этап.
Поместив inf и cab файлы рядом я проверил как устанавливается приложение. Хорошо устанавливается, клещами не вытянешь.
На этом этапе мы и будем изобретать клещи - секции для удаления нашего приложения (uninstall).
Сразу скажу, мне это далось не легко. В теории (учебнике по INF файлам) все выглядело просто. Указав в исполняемой секции AddReg= Секция добавления строк в реестр мы еще при установке приложения добавляем его в список установки\удаленимя программ.
Сама секция незамысловата и подробно описана в Учебнике. Самая важная строка это

HKLM,"%Key%","DisplayName",,"Netlook 2.3"
HKLM,"%Key%","DisiplayIcon",,"16422,"Netlook",0"
HKLM,"%Key%","UninstallString",,"rundll32.exe advpack,LaunchINFSectionEx %17%\netlook.inf,NL.Uninstall"

, нижняя запись указывает какую секцию выполнить в inf файле при удалении программы.
Наблюдательный человек сразу заметит, что путь к netlook.inf необычный, %17% = Windows\INF\
Для корректной отработки нам необходимо скопировать наш файл именно в эту директорию. Добавляем в секции копирования
[CopyInf]
netlook.inf

и добавляем в
[DestinationDirs]
CopyInf=17(Знаки процента в этой секции использовать нельзя)

Вот так вот.
Собственно секция которая отвечает за удаление должна выглядеть так: удаление файлов, удаление директорий, удаление записей в реестре, удаление ярлыков программы. У вас, наверняка, как и у меня сразу мелькнула мысль, а может просто удалить всю папку с файлами и подпапками, и дело с концом? Сразу огорчу, не получилось. Оговорюсь, не получилось методами описанными в учебнике. Есть гораздо более действенные способы.
В результате консультаций на форуме, пришлось создавать отдельные секции удаления файлов (по сути дубляж секций COPY). Зато результат был налицо - файлы удалялись.
Дальше я создал секции удаления записей в реестре(сразу после удаления программы она исчезала из списка удаления программ), удаления ярлыка и удаления директорий. Все работало замечательно. Огорчало только, то что директории не удалялись.
Учебник однозначно говорит, что вызвать DelDirs проще простого:
1)Вызвать из секции деинсталяции

Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\netlook.inf"",NL.DD,4"

2)затем указать саму комманду

[NL.DD]
DelDirs=dirs

3)и уже в секции [dir] указать директорию, которую необходимо прибить.

Не буду вас мучить, мне помогли добрые люди на форуме, и средства автоматизации создания аддонов, которые мы решили здесь не рассматривать.
Оказалось, во-первых DelDirs необходимо запускать только через RunPostSetupCommands, т.к. команда Run, которую я упорно мучил, принадлежит setupapi, а DelDirs запускается через advapi; во-вторых необходимо было прибить всю структуру папок снизу. Только после этого мой скрипт заработал как надо.

Секции деинсталяции аддона

[NL.Uninstall]
DelFiles=DelCopyMain, DelCopyConfig, DelCopyHelp, DelCopyHist, DelCopyLang, DelCopySkin, DelCopySound, DelCopyTools, DelCopyInf, DelRenToolsLang
DelReg=Dreg
ProfileItems = ShortcutD
RunPostSetupCommands=NL.AdinfCall

[NL.AdinfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\netlook.inf"",NL.DD,4"

[NL.DD]
DelDirs=dirs

[dirs]
"%16422%\Netlook\Tools\Configurator\Languages"
"%16422%\Netlook\Tools\Configurator"
"%16422%\Netlook\Tools"
"%16422%\Netlook\Sound"
"%16422%\Netlook\Skin"
"%16422%\Netlook\Languages"
"%16422%\Netlook\Help"
"%16422%\Netlook\Config"
"%16422%\Netlook"

[Dreg]
HKLM,"%Key%"

[ShortcutD]
Name = "Netlook 2.3",0x00000002
SubDir = "Утилиты"



Этап третий.
Создание собственно аддона. Все что мы делали до этого - создание собственного инсталлятора для программы.
Инсталлятор готов, можно использовать его на здоровье. Вспомним структуру аддонов и приступим.
Копируем откуда-нибудь скелет аддона (хороший стиль, это чужой стиль, незабываем :)). Сразу же переименовываем главную папку аддона
своим именем, правим файл Addon.nfo где пишем информацию, которую все равно никто не будет читать. Копируем в папку Files\Forcecopy
cab и inf -файлы. Оттуда их проинтегрирует в i386 скрипт Petya V4sechkin.
Важный момент! Так как мы все делаем вручную, надо проверить папку i386 на предмет совпадений с нашими файлами, дабы не перезаписать что-нибудь важное или просто принадлежащее системе, в любом случае при совпадениях имен система копирует свой родной файл из дистрибутива, а не "чужой". К счастью, я нашел только нечто, с именем NETLOOP.inf.

Теперь нам необходимо создать в корневой папке аддона 3 файла. Начнем по порядку. Сначала наш аддона будет скопирован из дистрибутива
посредством txtsetup.sif при помощи dosnet.inf и только позднее будет обнаружен и установлен через sysoc.inf. В такой последовательности
я и предлагаю создавать файлы, незабывая, что в UpdatePack эти файлы без расширений.
Здесь же в приложениях есть статья про txtsetup (http://forum.oszone.net/showpost.php?p=755068&postcount=415) . Поверьте, совсем не лишняя в багаже знаний.

txtsetup

[SourceDisksFiles]
Netlook.inf = 100,,,,,,,20,0,0
Netlook.cab = 100,,,,,,_x,,3,3

Комментировать нечего, inf файл при установке копируется в Windows\INF\, а cab архив не копируется, так как это наш дистрибутив.

dosnet

[Files]
d1,Netlook.inf
d1,Netlook.cab
*здесь d1 это папка i386.

Ну и собственно,

Sysoc
Netlook=ocgen.dll,OcEntry,Netlook.inf,,7

Вроде бы все готово. Однако если подумать, то в файле txtsetup мы не скопировали наш cab -файл. Обязательно надо переделать секцию указывающую
на источник копирования, дабы сообщить где искать cab.
[SourceDisksNames]
1="Netlook Files","netlook.cab",,"I386"


Но еще не все, я как все новички споткнулся на файле sysoc. Запись Netlook=ocgen.dll,OcEntry,Netlook.inf,,7 означает, что будет исполнена
секция [netlook] в файле netlook.inf. А моя исполняемая секция называлась DefaultInstall. Естественно ничего не установилось...
Кроме того, необходимо добавить в наш установочный файл секцию указывающую sysoc, что это "его" компонент и команду для автоустановки аддона:
[Optional Components]
Netlook (указатель для sysoc на исполняемую секцию)
.....
[Netlook]
...
Modes=0,1,2,3

Также после проверки работоспособности установщика, удаляются записи о копировании inf-файла, так как txtsetup.sif скопирует его самостоятельно.
Теперь аддон готов к интеграции в дистрибутив. Интегрируем, проверяем аддон, проверяем журнал событий и выполняем qfecheck на отсутствие наличия ошибок.

volk1234
18-03-2008, 01:59
Информация об использовании аддоном ключа HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx с конкретным номером(и) должна быть доступна пользователю и где то написана, например, в addon.nfo.
2 Сделать некий "стандартный" аддон »

Я как то даже не задумывался над этим.
Проблема предложенных вариантов, как и любых других в разделении ответственности: с одной стороны, что-то должны сделать авторы,
с другой пользователи должны добавить спецальный аддон(что маловероятно даже с Required).

Честно говоря незнаю других путей,
но предложить могу кое-что: Надо создать ветку здесь или на вики, допустим "Аддоны имеющие проблемы совместимости". В шапке можно
разбить по категориям аддоны. В чем плюс такой ветки: авторы видя такую сомнительную славу своего творения, будут стремится исправить ситуацию, пользователи будут проинформированны о возможных проблемах. Минус все тот же: такая ветка всеже не заставит, всех авторов что-либо менять в аддоне, и кто-то должен постоянно вести эту ветку...

FGT-ZS
18-03-2008, 19:45
*почему две запятые я не знаю »

INF SourceDisksNames Section
diskid = disk-description,cab-file,unused,path

Где
diskid - Положительное целое число в десятичном формате, индификатор диска.
disk-description - Параметр имеет информационное значение, возможно использование переменных
типа %zzz%, объявленных в секции Strings
cab-file - Определяет название файла, поставляемого на дистрибутивном диске или в инсталляционном
корне.
unused - Используется только в Windows 9x/Me.
path - Значение определяет путь к каталогу на дистрибутивном диске, содержащем исходные файлы.
Путь относителен к инсталляционному корню. Если это значение опущено То предполагается,
что файл находятся в инсталляционном корне дистрибутивного диска.

volk1234
18-03-2008, 22:43
FGT-ZS
Здесь http://oszone.net/display.php?id=3827
в Руководстве по Inf

[SourceDisksNames]
1 = "Drive_Name","data1.cab",subdir
2 = "Drive_Name 2","",0

где:
1 - переменная дистрибутивного пути,
"Drive_Name" - имя диска (label),
"data1.cab" - cabinet-архив на диске "Drive_Name", содержащий файлы, предназначенные для копирования (допускается указывать имя файла cab-архива без расширения),
subdir - Поддиректория на диске "Drive_Name",
содержащая файл "data1.cab".

Если верна ваша информация получается такая строка :

1="NetLook Files","netlook.cab",0

отрабатывает просто из за того что '0' попадает на неиспользуемый параметр?
Или это знаменитая путаница мелкомягких?

FGT-ZS
18-03-2008, 22:51
volk1234,
Информация - made in MSDN,
скорее 0 попадает на неиспользуемый параметр и не обрабатывается.

volk1234
18-03-2008, 23:45
Значит надо просить Vek или Vadikan поправить статью по INF.
FGT-ZS можно линк?

FGT-ZS
18-03-2008, 23:51
http://msdn2.microsoft.com/en-us/library/ms794354.aspx

Zetoke
20-03-2008, 18:38
Насчет руководства по созданию аддонов
3.Конфигурационные файлы располагаются в паке Files аддона
Может они находятся в корневой папке аддона? А может я ошибаюсь... По-моему в папке Files находятся файлы, которые копируются в дистрибьютив. :)

volk1234
21-03-2008, 10:05
Может они находятся в корневой папке аддона? А может я ошибаюсь... »
Исправил.Спасибо

volk1234
22-03-2008, 12:22
Господа аддоно-писатели
нашел в sysoc секцию [NetOptionalComponents]
что она дает?
Возможно ее применение даст гибкость установки
есть сеть - сетевая утилита ставится, нету - не ставится.
Или я неправильно понял значение этой секции??

и еще вопрос
программа при установке копирует один файл в две директории
если я пропишу это в 2х разных секциях копирования
не будет ругатся установщик??

DyadyaGenya
22-03-2008, 13:36
volk1234, я высскажу некоторые соображения по написанию статьи про аддоны которую вы затеяли. я конечно не такой гуру в написании аддонов как основная часть форумчан, но вроде как причастен к обучающему процессу, стажа уже лет 15, и немного сталкивался с написанием учебных пособий, на мой взгляд коректней сперва (как вы и сделали) дать понятие что такое аддон, а потом поменять местами раздел Имена файлов и папок да и вообще всю главу про общие понятия с типами аддонов. Предлагаемая мною структура учебного пособия
1 - что такое аддон
2 - типы аддонов и способы их применеия
3 - общие понятия
4 - структура аддона sysoc
5 - структура аддона svpack
6 - структура комбинированного аддона
7 - структура аддона изменяющего дистрибутив
8 - примеры и приложения
9 - характеристика приложений с помощью которых облегчаеться написание аддонов

и конечно же оставить ссылку на обязательное прочтение статьи про инф файл




© OSzone.net 2001-2012