Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Наборы обновлений для Windows XP/2003/Windows 7 » Инфо - Руководство по созданию аддонов (текущая версия)

Ответить
Настройки темы
Инфо - Руководство по созданию аддонов (текущая версия)

Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: volk1234
Дата: 24-09-2010
Описание: новая версия на сайте

Руководство перенесено в статью на сайте, но его обсуждение не закончилось. Любой может добавить в него что- нибудь новенькое.

Предлагаю сосредоточиться пока на двух разделах, которые будут дорабатыватся в ветке и только потом переносится в Руководство.

Сейчас обсуждается статья: - новое приложение 9.
===============
*Если вы заметили орфографические ошибки, пишите, пожалуйста, в личку

Отправлено: 19:19, 27-02-2008

 

(*.*)


Сообщения: 36556
Благодарности: 6694

Профиль | Сайт | Отправить PM | Цитировать


Цитата Master Fess:
с его помощью копируются файлы и ульи реестра с диска »
В официальной терминологии - куст.

Цитата Master Fess:
сверяется с файлом unattended.txt(winnt.sif), если он есть »
Цитата Master Fess:
обычно используют SFX архивы(7z, RAR, и т.д.), либо исполняемые файлы »
пробел перед скобкой
Цитата Master Fess:
секции из sysoc,txtsetup,dosnet, находящихся в корневой папке аддона, переносятся »
пробелы после запятых
Цитата Master Fess:
мне нечего, ибо незнаю больше. »
не знаю - раздельно

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 21:37, 03-04-2008 | #101



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Zetoke

Ветеран


Сообщения: 822
Благодарности: 93

Профиль | Сайт | Отправить PM | Цитировать


Vadikan, Если исправлять все пробелы после знаков препинания и скобок, то....

volk1234, Исправляй пробелы после всех знаков препинания и скобок
Если будет время, то еще ошибки поищу.

Отправлено: 21:42, 03-04-2008 | #102


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Я очень благодарен Vserd и Master Fess и всем кто правит мой корявый русский язык,
но немного выше я просил кидать в личку. Так как статья дорабатывалась, были возможны
изменения целых кусков текста, так что старые ошибки исчезли бы, а новые появились
Правда на мой взгляд текст руководства уже готов, осталось добавить пару приложений...

-------

Ю-ху!


Отправлено: 23:30, 03-04-2008 | #103


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Руководство отредактированно по орфографии.
Чувствую не последняя правка.

Цитата Vadikan:
не знаю - раздельно »
Это уже не статья, а фольклёрная речь

-------

Ю-ху!


Последний раз редактировалось volk1234, 04-04-2008 в 01:12.


Отправлено: 23:46, 03-04-2008 | #104


Ветеран


Сообщения: 894
Благодарности: 137

Профиль | Отправить PM | Цитировать


volk1234,
Собери всю статью в один файл, тхт. Выложи в шапку.
Его проще прогонять через орфограф, один человек исправит орфографию и забудем о пробелах. Просто замениш файл и все.
Затем с помошью diff можно присылать тебе только изменения об ошибках.
А в топике обкатывать формулировки и информацию.
Процентов 80 у тебя уже в статике. Устоялось. Остальное по ходу.

-------
Я не развожу политику в подписи
ПТН ПНХ


Отправлено: 09:02, 04-04-2008 | #105


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Прикрепил Руководство в текстовом формате.

Оставил теги - "[code]" и "[center]" дабы чуть легче было разбирать
текст.

-------

Ю-ху!


Отправлено: 20:03, 06-04-2008 | #106


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Команды inf скрипта (advpack) не указанные в руководстве по inf-файлам.

Попутно сбору инфы для руководства нарыл инфы про inf файлы.
Думаю, если не будет полезно при написании аддонов, то хотябы
будем знать какие команды зарезервированны интерпретатором,
дабы не называть так секции
=====
пока помещу в раздел Хитрости при написании inf файлов, если vek доработает руководство, уберу из приложений.

читать дальше »
UpdateCfgSys

Позволяет отредактировать содержимое файла config.sys и указывает на раздел, который может содержать следующие ключевые слова: DevRename, DevDelete, DevAddDev, Stacks, Buffers, Files, LastDrive


UpdateAutoBat

Позволяет отредактировать содержимое файла autoexec.bat и указывает на раздел, который может содержать следующие ключевые слова: CmdAdd (формат: "программа","ключи программы"), CmdDelete (формат: "программа"), UnSet (формат: "имя переменной окружения"), PreFixPath (формат: "числовое значение, числовое значение"), RemOldParh (формат: "числовое значение, числовое значение"), TmpDir (формат: "числовое значение, дальней путь").

SmartReboot

Указывает, будет ли выполняться перезагрузка компьютера после установки сценария. Данное ключевое слово может принимать следующие значения.

— N — никогда не выполнять перезагрузку.
— AS — после установки сценария выполнить перезагрузку, не спрашивая согласия пользователя.
— IS — если система определила, что нужно выполнить перезагрузку, тогда компьютер будет перезагружен. При этом вопрос о перезагрузке задан не будет.
— A — после установки сценария спросить пользователя о перезагрузке компьютера.
— I — если перезагрузка необходима, тогда спросить у пользователя.

BitReg

Указывает на разделы inf-файла (через запятую), содержащие описание параметров реестра, в значении которых будут отредактированы отдельные биты.
Разделы inf-файла, используемые для редактирования битов значения параметров реестра, могут содержать в себе строки следующего формата (одна строка редактирует значение одного параметра реестра):

"Корневой раздел", "ветвь реестра", "параметр", "флаг операции", " маска операции", "номер байта параметра"

Корневой раздел

Содержит идентификатор корневого раздела реестра, в котором расположен редактируемый параметр. Идентификатор может принимать следующие значения: HKCU (корневой раздел HKEY_CURRENT_USER), HKLM (корневой раздел HKEY_LOCAL_MACHINE), HKU (корневой раздел HKEY_USERS), HKCR (корневой раздел HKEY_CLASSES_ROOT), HKCC (корневой раздел HKEY_CURRENT_CONFIG),HKR (ветвь реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass[{GUID-класса устройства}][номер устройства]).

Флаг

Определяет тип редактирования параметра. Флаг представляет собой битовую маску, некоторые состояния которой представлены ниже.

— 0х00000000 — сбросить биты параметра.
— 0х00000001 — установить биты параметра.
— 0х00040000 — выполнить редактирование в 32-разрядном реестре.

Маска операции

Определяет биты одного байта значения параметра (одной строкой раздела inf-файла можно изменять биты только в пределах одного байта значения параметра), которые должны быть модифицированы. То есть, маска состоит из 8 нулей или единиц. Если установлена единица, тогда соответствующий бит значения параметра (на месте которого указана единица) будет сброшен или установлен в зависимости от флага операции. Маска операции является битовой маской.

Номер байта значения параметр

Определяет байт значения параметра, к которому будет применяться маска операции. Следует помнить, что начало нумерации байтов зависит от типа параметра. Для параметров типа REG_DWORD самый старший (то есть, самый правый) байт имеет номер 0, а для параметров типа REG_BINARY номер 0 имеет самый младший байт (самый левый).

Пример
Код: Выделить весь код
[version]
Signature="$CHICAGO$"

[DefaultInstall]
AddReg=AttrOn
BitReg=Rec_Bit



[AttrOn]
;присваиваем параметру CallForAttributes значение 0, чтобы
;система обращала внимание на значение параметра Attributes
HKCR,"CLSID{645FF040-5081-101B-9F08-00AA002F954E}ShellFolder",CallForAttributes,0x00010001,0
;если параметр Attributes не существует, создаем его
HKCR,"CLSID{645FF040-5081-101B-9F08-00AA002F954E}ShellFolder",Attributes,0x00010003,0

[Rec_Bit]
;сбрасываем биты первого байта параметра
HKCR,"CLSID{645FF040-5081-101B-9F08-00AA002F954E}ShellFolder",Attributes,0,0xff,0
;сбрасываем биты второго байта параметра
HKCR,"CLSID{645FF040-5081-101B-9F08-00AA002F954E}ShellFolder",Attributes,0,0xff,1
;устанавливаем биты первого байта параметра
HKCR,"CLSID{645FF040-5081-101B-9F08-00AA002F954E}ShellFolder",Attributes,1,0x70,0
;устанавливаем бит второго байта параметра, чтобы
;добавить корзине прозрачность
HKCR,"CLSID{645FF040-5081-101B-9F08-00AA002F954E}ShellFolder",Attributes,1,0x80,1

Вот небольшая статья про CustomDestination. Несмотря на то что описание уже есть в руководстве по inf
файлам, здесь немного другой взгляд на комманду.

CustomDestination

Указывает на разделы inf-файла (через запятую), содержащие определение произвольных LDID-номеров на основе данных, введенных пользователем в появляющемся диалоге. Формат строк данных разделов следующий:

"новый LDID-номер"= "раздел, описывающий сообщение", "флаг".

Новый LDID-номер

Число от 40000 до 50000, используемое в дальнейшем в качестве LDID на введенный путь к папке.

Флаг

Определяет способ построения пользовательского LDID и может принимать следующие значения:

— 1 — выводить диалоговое окно, в котором пользователь должен ввести путь к каталогу, к которому в дальнейшем будет вести создаваемый LDID.
— 2 — каталог, к которому будет вести создаваемый LDID, определяется значением параметра реестра.
— 34 — выводить пользователю диалоговое окно с произвольным текстом. При этом сам каталог, на который будет указывать пользовательский LDID, будет взят из реестра.

Раздел, описывающий сообщение

Параметр реестра, из которого будет браться путь к каталогу, текст, выводимый при отсутствии данного параметра реестра или при вводе пользователем пути к каталогу, а также каталог по умолчанию. Формат содержимого данного раздела следующий:

"корневой раздел реестра", "остальной путь к параметру", "название параметра", "выводимое сообщение", "каталог по умолчанию".

Пример
Код: Выделить весь код
[version]
Signature = $CHICAGO$
AdvancedINF=2.5, "Эта строка будет выводится, если на компьютере не найдено библиотеки advpack.dll "

[DestinationDirs]
CopyTo = 49555

[CopyTo]
1.jpg

[DefaultInstall]
CustomDestination=CD
CopyFiles = CopyTo

[CD]
49555 = CDD, 1

[CDD]
;Выводим диалог запроса каталога для установки. Название каталога по
;умолчанию будет считываться из параметра реестра ProgramFilesDir,
;содержащего в себе путь к каталогу %programfiles%. Если по каким-то
;причинам в реестре отсутсвует данный параметр, тогда по умолчанию будет
;использоваться каталог C:\Program files
HKLM, "SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFiles\Dir","Укажите каталог","C:Program Files"
UpdateIniFields аналог UpdateInis

Указывает на разделы inf-файла (через запятую), содержащие в себе описание действий над содержимым значений полей ini-файлов, которые должны быть выполнены в процессе установки.
В отличии от UpdateInis оперирует с частью строки, а не со строкой в целом.
Формат строк этих разделов следующий:

"название раздела в ini-файле", "название ключевого слова ini-файла без знака =", "старое значение данного ключевого слова", "добавляемое значение нового ключевого слова", "флаг операции"

Флаг операции

Может содержать следующие значения.

— 00 — новое значение будет дописано через пробел к текущему значению редактируемого ключевого слова (используется по умолчанию).
— 01 — новое значение будет дописано через запятую к текущему значению редактируемого ключевого слова.
— в случае единицы впереди * интерпретируется как подстановочный символ, в случае нуля как буквальный символ


Ini2Reg

Указывает на разделы inf-файла (через запятую), содержащие в себе описание добавляемых в реестр строк ini-файла. Формат строк этих разделов следующий:

"название ini-файла", "раздел в ini-файле", "ключевое слово ini-файла", "корневой раздел реестра", "остальной путь к ветви реестра", "флаг"

Корневой раздел

Содержит идентификатор корневого раздела реестра, в котором расположен редактируемый параметр. Идентификатор может принимать следующие значения: HKCU (корневой раздел HKEY_CURRENT_USER), HKLM (корневой раздел HKEY_LOCAL_MACHINE), HKU (корневой раздел HKEY_USERS), HKCR (корневой раздел HKEY_CLASSES_ROOT), HKCC (корневой раздел HKEY_CURRENT_CONFIG),HKR (ветвь реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass[{GUID-класса устройства}][номер устройства]).

Флаг

Может содержать следующие значения.

— 0 — после переноса данных в реестр, соответствующие им ключевые слова не будут удаляться из ini-файла. При этом если в реестре уже существует создаваемая ветвь, тогда она переписана не будет. Значение по умолчанию.
— 1 — после переноса данных в реестр, соответствующие им ключевые слова будут удалены из ini-файла. При этом если в реестре уже существует создаваемая ветвь, тогда она переписана не будет.
— 2 — после переноса данных в реестр, соответствующие им ключевые слова не будут удаляться из ini-файла. При этом если в реестре уже существует создаваемая ветвь, ее содержимое будет переписано.
— 3 — после переноса данных в реестр, соответствующие им ключевые слова будут удаляться из ini-файла. При этом если в реестре уже существует создаваемая ветвь, ее содержимое будет переписано.

BackupPath


Определяет папку, в которой будет создан .dat-файл, содержащий в себе значения заархивированных параметров реестра. Значение этого ключевого слова заносится в параметр строкового типа BackupPath ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Advanced INF Setup\"имя архива".

BackupReg

Указывает раздел inf-файла, описывающий все ветви реестра и параметры, значения которых будут занесены в архив. Формат строк раздела следующий:

"корневой раздел реестра", "остальной путь к архивируемой ветви", "параметр, значение которого нужно заархивировать".

PreRollBack

Указывает раздел inf-файла, являющийся начальным при восстановлении настроек реестра (то есть, при запуске inf-файла при помощи команды rundll32.exe ADVPACK.dll, LaunchINFSectionEx "имя информационного файла", "начальный раздел",,64).

ComponentName


Определяет имя создаваемого архива. Данное имя будет использоваться как в качестве имени создаваемого .dat-файла, так и в качестве имени раздела ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Advanced INF Setup, содержащего настройки восстановления параметров реестра из данного архива.

Общий пример для команд ComponentName, ComponentVersion, PreRollBack, BackupReg.
Код: Выделить весь код
[version]
Signature = $CHICAGO$
AdvancedINF=2.5, "Эта строка будет выводится, если на компьютере не найдено библиотеки advpack.dll "

[DestinationDirs]
INFCopy = 17
DelINF = 17

[INFCopy]
;будем считать, что наш устанавливаемый сценарий называется Interfeice.inf
Interfeice.inf

[DelINF]
;на всякий случай удаляем создаваемый перед восстановлением сценарий
Interfeice2.inf

[DefaultInstall]
ComponentName = "Interfeice"
ComponentVersion = "1.0"
BackupPath = %10%Para
BackupReg = BR_Interfeice
PreRollBack = PRB_Interfeice
;копируем сценарий в папку INF, после чего удалить его из текущей папки
CopyFiles = INFCopy
Cleanup

[PRB_Interfeice]
BeginPrompt = Hello
DelFiles = DelINF
UpdateInis=MyIniEdit
RunPostSetupCommands = SaveRestore

[SaveRestore]
;вызываем созданный нами inf-файла для архивирования текущих настроек оболочки
;Теперь вы всегда сможете обратно восстановить настройки интерфейса при помощи команды
;rundll32.exe ADVPACK.dll, LaunchINFSectionEx interfeice2.inf, DefaultInstall,,64
"rundll32.exe ADVPACK.dll, LaunchINFSectionEx interfeice2.inf, DefaultInstall,,32"

[MyIniEdit]
;Создаем inf-файл, с помощью которого мы заархивируем текущие настройки интерфейса оболочки перед их восстановлением.
%17%\Interfeice2.inf, Hello2,, "Prompt = Все-таки предыдущие настройки интерфейса оболочки были лучше? :-) Восстановить их обратно?", 0
%17%\Interfeice2.inf, Hello2,, "Titlie = Восстановление настроек интерфейса", 0
%17%\Interfeice2.inf, PRB_Interfeice2,, "BeginPrompt = Hello2", 0
%17%\Interfeice2.inf, BR_Interfeice,, "HKCU, Control Panel\Appearance", 0
%17%\Interfeice2.inf, BR_Interfeice,, "HKCU, Control Panel\Colors", 0
%17%\Interfeice2.inf, BR_Interfeice,, "HKCU, Control Panel\Current", 0
%17%\Interfeice2.inf, BR_Interfeice,, "HKCU, Control Panel\Cursors", 0
%17%\Interfeice2.inf, BR_Interfeice,, "HKCU, Control Panel\Custom Colors", 0
%17%\Interfeice2.inf, BR_Interfeice,, "HKCU, Control Panel\Desktop", 0
%17%\Interfeice2.inf, DefaultInstall,, "ComponentName = Interfeice2", 0
%17%\Interfeice2.inf, DefaultInstall,, "ComponentVersion = 1", 0
%17%\Interfeice2.inf, DefaultInstall,, "BackupPath = %10%\Para", 0
%17%\Interfeice2.inf, DefaultInstall,, "BackupReg = BR_Interfeice", 0
%17%\Interfeice2.inf, DefaultInstall,, "PreRollBack = PRB_Interfeice2", 0
;на всякий случай создаем inf-файл, с помощью которого заархивируем текущие настройки интерфейса оболочки
%17%\Interfeice2.inf, version,, Signature = $CHICAGO$, 0
%17%\Interfeice2.inf, version,, "AdvancedINF=2.5, Error", 0

[Hello]
Titlie = "Восстановление настроек интерфейса"
Prompt = "Вы уверены, что хотите восстановить прежние настройки интерфейса оболочки? Может нынешние все-таки не так уж и плохи? Так что, восстановить?"

[BR_Interfeice]
HKCU, "Control Panel\Desktop"
HKCU, "Control Panel\Custom Colors"
HKCU, "Control Panel\Cursors"
HKCU, "Control Panel\Current"
HKCU, "Control Panel\Colors"
HKCU, "Control Panel\Appearance"
[.Security]

С помощью inf-файлов можно не только копировать файлы, но и назначать права доступа к копируемым файлам. Для этого и предназначен раздел вида "имя раздела, описывающего копируемые файлы».Security" В этом разделе содержится строка DACL, присваиваемая всем файлам, определенным в соответствующем разделе, указанном в ключевом слове CopyFile.

Пример
Код: Выделить весь код
[version]
Signature = $CHICAGO$

[DestinationDirs]
CP = 53, Рабочий стол

[CP]
qwerty.inf

[CP.Security]
"D:P(A;CI;GR;;;AU)(A;CI;GA;;;BA)(A;CI;GA;;;SY)(A;CI;GR;;;NS)(A;CI;GR;;;LS)(A;CI;CCDCLCSWRPSDRC;;;NO)"

[DefaultInstall]
CopyFiles= CP
PerUserRemove

Если существует секция PerUserInstall, то должна быть и обратная PerUserRemove (подглядел в инстале Win 98)
Данная секция обратна секции PerUserInstall и скорее всего отвечает за выведение из списка Active Setup.

Пример:

Код: Выделить весь код
......
[Uninstall]
;BeginPrompt=BeginPromptSection
;EndPrompt=EndPromptSection
Delfiles=PLAYER.Files.Sys
DelReg=UninstallKey.Reg,DelUninstallKey,PLAYER.Add.Reg,PLAYER.Add.Reg.User
UpdateInis=PLAYER.Update.Ini,Update.Ini.User.Remove,PLAYER.Update.Ini.User,Update.Ini.User.Remove
PerUserInstall=Player.Stub.Remove


[Player.Stub.Remove]
DisplayName=%PackageName%
ComponentID=VDOPlayer
GUID={58A00AC3-777B-11CF-827D-0020AFF5FF72}
IsInstalled=0
Version=2,0,2,0
Locale=EN
StubPath=rundll32.exe advpack.dll,LaunchINFSection %17%\vdolive.inf,PerUserRemove

[PerUserRemove]
DelReg=PLAYER.Add.Reg.User
UpdateInis=Update.Ini.User.Remove,PLAYER.Update.Ini.User


10.04.08 добавил описание секции [.Security] использующую DACL
19.04.08добавил описание секции PerUserRemove
22.04.08 обновил описание UpdateIniFields

-------

Ю-ху!


Последний раз редактировалось volk1234, 22-04-2008 в 01:57.

Это сообщение посчитали полезным следующие участники:
Показать/скрыть список поблагодаривших

Отправлено: 02:55, 09-04-2008 | #107


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Обновлено руководство по написанию аддонов.
+Пример 3. Разбор конструктора K-lite codek pack.


Пример 3. Разбор конструктора K-lite codek pack

читать дальше »
В данном примере рассмотрим устройство аддона-конструктора.
В основе аддона - возможность создания "тихой" установки K-lite с помощью ключа
инсталятора -unnatended. После запуска установки с этим ключом происходит, эмуляция
установки с обычном набором окошек: выбор папки установки, выбор устанавливаемых
кодеков. В результате мы получаем набор файлов для автоматической установки программы:
klmcp.ini, klmcp.bat и сам дистрибутив, переименованый в klmcp.exe, для краткости.
Автоустановка запускается через командный файл который состоит из одной строки
запускающий установку в "тихом" режиме и подключающий ini- файл с настройками:

Код: Выделить весь код
@klmcp.exe /verysilent /norestart /dir="%ProgramFiles%\K-Lite Codec Pack" /LoadInf=".\klmcp.ini"
Вобщем то приведенной информации достаточно чтобы создать аддон типа SVCPACK, запаковав
файлы Winrar в виде SFX архива, с "тихим" запуском батника при распаковке.
Для создания же конструктора лучше сократить количество действий пользователя при его сборке. Автор
аддона рассудил также и решил создать комбинированный конструктор (Sysoc+svcpack).

Посмотрим на структуру папок готового аддона:

Код: Выделить весь код
KLiteMega
      +Files	
            -+ForceCopy
                    --+SVCPACK
                      ---klinst.exe  - установка K-lite
              --klmcp.bat
              --klmcp.exe      > файлы автоустановки K-lite
              --klmcp.ini
              --KLITE.IN_     - inf для копирования файлов на текстовом этапе
      -conflict
      -dosnet
      -Run
      -sysoc
      -txtsetup               > конфигурационные файлы
      -addon.nfo
На текстовом этапе файлы аддона копируются во временную папку %Windir%\Temp\KL:

KLITE.inf
Код: Выделить весь код
.....
[DestinationDirs]
klite.Copy=10,"Temp\KL"

[klite.Copy]
klmcp.bat,,,4
klmcp.exe,,,4
klmcp.ini,,,4
Фактически это и все что делается на текстовом этапе через Sysoc.

Установка кодеков происходит на Т13, для чего через Run создан пустой 7zip SFX-архив
с командами установки в коментарии архива.

klite.exe
Код: Выделить весь код
RunProgram="hidcon:\"klmcp.bat\""
InstallPath="%SystemRoot%\\Temp\\KL"
GUIMode="2"
Delete="%SystemRoot%\\Temp\\KL"
Как видно ничего сложного, запускается коммандный файл в скрытом режиме, в качестве
папки источника для установки указана "%SystemRoot%\\Temp\\KL", куда на текстовом режиме
установки Windows , были скопированы необходимые файлы. Затем временная папка удаляется.

Это весь аддон. Как видно ничего сложного нет. Файлы установки лежащие в папке аддона
Files\ForceCopy можно заменять новыми версиями K-lite, по мере необходимости.
Можно спорить со способом реализации аддона выбранным автором, но аддон работает и это главное.

-------

Ю-ху!

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:44, 12-04-2008 | #108


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Обновлено руководство по написанию аддонов.
+Приложение 2. Тонкости использования inf- файлов. (в этом посте)

*Думаю это будет самый пополняемый раздел руководства. Или вообще он не в тему здесь ??

Приложение 2. Тонкости использования inf- файлов.
читать дальше »

1. DIR IDs

В руководстве по написанию INF-файлов дан наиболее полный перечень стандартных DIRID, однако по непонятной причине не
указаны специальные переменные оболочки. Привожу наиболее полный список от Gosh
Код: Выделить весь код
	Value		Shell Special Folder 

	16384 		%userprofile%\Desktop (Рабочий стол)
	16386 		%userprofile%\Start Menu\Programs (группа Программы меню Пуск)
	16389 		%userprofile%\My Documents (папка Мои документы)
	16390 		%userprofile%\Favorites (папка Избранное)
	16391 		%userprofile%\Start Menu\Programs\Startup (группа Автозагрузка)
	16392 		%userprofile%\Recent (Недавние документы)
	16393 		%userprofile%\SendTo (папка для меню Отправить)
	16395 		%userprofile%\Start Menu (меню Пуск или папка Главное меню)
	16397 		%userprofile%\My Documents\My Music (папка Моя музыка)
	16398 		%userprofile%\My Documents\My Videos (папка Мои видеозаписи)
	16400 		%userprofile%\Desktop (Рабочий стол)
	16403 		%userprofile%\NetHood (папка Сетевое окружение)
	16404 		C:\WINDOWS\Fonts (папка Шрифты)
	16405 		%userprofile%\Templates (папка Шаблоны)
            16406 *           %allusersprofile%\Start Menu
	16407 *	%allusersprofile%\Start Menu\Programs (группа Программы меню Пуск)
	16408*	%allusersprofile%\Start Menu\Programs\Startup (меню Пуск или папка Главное меню)
	16409 *	%allusersprofile%\Desktop (Рабочий стол)
            16410              %userprofile%\Application Data 
	16411 		%userprofile%\PrintHood (папка Принтеры)
	16412 		%userprofile%\Local Settings\Application Data
	16415 *	%allusersprofile%\Favorites (папка Избранное)
	16416 		%userprofile%\Local Settings\Temporary Internet Files
	16417 		%userprofile%\Cookies
	16418 		%userprofile%\Local Settings\History
	16419 *	%allusersprofile%\Application Data
	16420 		System Root (C:\WINDOWS)
	16421 		C:\WINDOWS\System32
	16422 		Program Files
	16423 		%userprofile%\My Documents\My Pictures (Мои рисунки)
	16424 		%userprofile%
	16425 		C:\WINDOWS\System32
	16427 		C:\Program Files\Common Files
	16429 *	%allusersprofile%\Templates (папка Шаблоны)
	16430 *	%allusersprofile%\Documents (папка Мои документы)
	16431 *	%allusersprofile%\Start Menu\Programs\Administrative Tools
	16432 		%userprofile%\Start Menu\Programs\Administrative Tools
	16437 *	%allusersprofile%\Documents\My Music (папка Моя музыка)
	16438 *	%allusersprofile%\Documents\My Pictures (Мои рисунки)
	16439 *	%allusersprofile%\Documents\My Videos (папка Мои видеозаписи)
	16440 		C:\WINDOWS\resources
	16441 		C:\WINDOWS\resources\0409
	16443 		%userprofile%\Local Settings\Application Data\Microsoft\CD Burning
*Для удобства выделены DIRID ссылающиеся на %allusersprofile%
NB Помните, что во время установки Windows переменная %userprofile% =%defaultuser% (других пользователей еще не существует)


2. Методы деинсталяции.

Один из проблемных моментов, корректное удаление установленного приложения.

Первое что нужно сделать это еще при установке приложения добавить наряду с другими строку для удаления приложения в реестр с указанием сеции отвечающей за деинсталяцию:
Код: Выделить весь код
HKLM,"%Key%","DisplayName",,"SOMEAPP"
HKLM,"%Key%","DsiplayIcon",,"16422,"SOMEAPP",0"
HKLM,"%Key%","UninstallString",,"rundll32.exe advpack,LaunchINFSectionEx %17%\SOMEONE.inf,Uninstall"
KLM,"%Key1%","SOMEAPP",0x00020000,"C:\Program Files\SOMEAPP\SOMEAPP.exe"
HKLM,"%Key2%","Start Minimized",0x10001,01,00,00,00
Способ 1. "По учебнику"

Используем инструкции DelDirs и DelFiles.
Код: Выделить весь код
[DefaultInstall]
CopyFiles=files

[files]
filename.ext

[DestinationDirs]
files= 11, APPDIR

;из секции деинсталяции сначала запускаем удаление всех файлов, для этого желательно
;создавать отдельную секцию со списком удаляемых файлов, хотя допустимо и использовании секции 
;со списком для копирования (если нет переименования, специальных флагов)

[Uninstall]
DelFiles=files
RunPostSetupCommand=SOMEAPP.AdinfCall
; затем запускаем через RunPostSetupCommand библиотеку advpack для обработки команды Deldirs

[SOMEAPP.AdinfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\SOMEONE.inf"",Del.Folders,4"

[Del.Folders]
Deldirs=dirs
;передаем список директорий для удаления

[dirs]
%11%, APPDIR
NB Нужно учитывать важный момент: если не все файлы не удалены из папок, DelDirs не сработает. Если вы удаляете папку содержащую подпапки (даже пустые), DelDirs не сработает.
Так что сначала надо удалить файлы, затем подпапки "с меньшей", и только затем корневую папку приложения

Способ 2. "Радикальный"

Используется внутреняя команда библиотеки rundll32 DelNodeRunDLL32 для удаления непустых директорий.

Будем продолжать работать с предыдущим примером:
Код: Выделить весь код
[Uninstall]
DelFiles=files
RunPostSetupCommand=Del.Folders

[Del.Folders]
rundll32.exe advpack,DelNodeRunDLL32 "%11%, APPDIR"
NB Нужно учитывать важный момент: если файлы в удаляемой папке заняты системой \ выполняются, DelNodeRunDLL32 не сработает. В следующим способе вы увидите
способ решения этой проблемы через консольную команду TASK KILL.

Способ 3. "Готовый шаблон"

Данный способ предложил Jameszero.

Код: Выделить весь код
[Version]
Signature="$Windows NT$"
AdvancedINF=2.5

[Optional Components]
Programm_1

[Programm_1]
OptionDesc			=%PROG_NAME%
Tip				=%PROG_INFO%
Modes				=0,1,2,3
AddReg			=PROG.AddReg
ProfileItems			=PROG.AddShortcut

[DefaultInstall]
AddReg			=PROG.AddReg
ProfileItems			=PROG.AddShortcut

[Uninstall]
BeginPrompt			=BeginUnInsPrompt
RunPreSetupCommands	=Close.Prog:1
RunPostSetupCommands	=Dir.Delete
EndPrompt			=EndUnInsPrompt
DelReg			=PROG.DelReg
ProfileItems			=PROG.DelShortcut
DelFiles			=Del.PNF

[BeginUnInsPrompt] 
Title				=Деинсталляция %PROG_NAME%
Prompt				=Вы действительно хотите удалить %PROG_NAME% и все компоненты программы? 
ButtonType			=YESNO

[Close.Prog] 
TASKKILL /F /IM %PROG_1% 
TSKILL %PROG_2%

[Dir.Delete] 
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROG_DIR%

[EndUnInsPrompt] 
Prompt				=Программа %PROG_NAME% удалена.

[DestinationDirs]
Del.PNF			=17

[Del.PNF]
%PROG_PNF%

[PROG.AddReg]
HKLM,"%SWUninstall%\%PROG_NAME%_addon","DisplayIcon",0,"%16422%\%PROG_DIR%\%PROG_1%"
HKLM,"%SWUninstall%\%PROG_NAME%_addon","DisplayName",,%PROG_NAME%"
HKLM,"%SWUninstall%\%PROG_NAME%_addon","DisplayVersion",,"v%PROG_VERS%"
HKLM,"%SWUninstall%\%PROG_NAME%_addon","Publisher",,"%PROG_MADE%"
HKLM,"%SWUninstall%\%PROG_NAME%_addon","URLInfoAbout",,"%PROG_URL%"
HKLM,"%SWUninstall%\%PROG_NAME%_addon","UninstallString",,"rundll32.exe advpack.dll,LaunchINFSection %PROG_INF%,Uninstall"

[PROG.DelReg]
HKLM,"%SWUninstall%\%PROG_NAME%_addon"

[PROG.AddShortcut]
Name				=%SRTC_NAME%
CmdLine			=16422,%PROG_DIR%,%PROG_1%
WorkingDir			=16422,%PROG_DIR%
SubDir				=%PROG_SDIR%
InfoTip				=%PROG_INFO%

[PROG.DelShortcut]
Name				=%SRTC_NAME%,0x00000002
SubDir				=%PROG_SDIR%

[Strings] 
PROG_DIR			="Miranda IM" 
PROG_NAME			="Miranda IM"
SRTC_NAME			="Miranda IM"
PROG_VERS			="0.7"
PROG_MADE			="oszone.net"
PROG_URL			="http://forum.oszone.net/forum-62.html"
PROG_INF			="miranda.inf"
PROG_PNF			="miranda.PNF"
PROG_1			=miranda32.exe
PROG_2			=miranda32
PROG_SDIR			=""
PROG_INFO			="Программа для общения по ICQ протоколу"
SWUninstall			="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
При редактировании только одной секции [String] и переименовании секции инсталляции, можно использовать этот inf для установки/удаления других аддонов. Аддоны должны быть комбинированные, т.е. сначала из sysoc срабатывает данный inf файл, а затем из SVCPACK запускается sfx архив, созданый любым доступным способом, при этом, sfx архив должен просто распаковать файлы в нужную директорию.
Создание ярлыков, внесение информации в реестр (в том числе о деинсталляции) реализовано в inf файле.

Деинсталляция перенесена из привычного для sysoc аддонов места "Установка компонентов Windows" в Установку и удаление программ"
При деинсталляции будет выдан запрос "Вы действительно хотите удалить такую то программу?",
Если программа в данный момент запущена, она будет выгружена из памяти, далее произойдёт удаление директории с программой, ярлыков, записей реестра.
По окончании деинсталляции будет сообщено "Программа такая то удалена". Удаляется PNF-файл созданный при установке программы. PNF - файл это компилированный (pre-compilled) INF- файл, необходим один раз при установке.


3. Создание ярлыков


1.Cоздание/удаление ярлыка в контекстном меню "Отправить" (SendTo) с помощью inf

Код: Выделить весь код
[Version]
Signature="$Windows NT$"

[DefaultInstall]
ProfileItems		=PROG.AddShortcut

[Uninstall]
ProfileItems		=PROG.DelShortcut

[PROG.AddShortcut]
Name       = "Send_To_Shortcut",0x00000008,9
CmdLine    = 11,,prog.exe

[PROG.DelShortcut]
Name       = "Send_To_Shortcut",0x0000000A,9
2. Cоздание и удаление ярлыка в Quick Launch

Код: Выделить весь код
[Version]
Signature="$Windows NT$"

[DefaultInstall]
ProfileItems	=PROG.AddShortcut

[Uninstall]
ProfileItems	=PROG.DelShortcut

[PROG.AddShortcut]
Name		=%SRTC_NAME%,0x00000001
CmdLine		=16422,%PROG_DIR%,%PROG_1%
WorkingDir	=16422,%PROG_DIR%
SubDir		=%PROG_SDIR%
InfoTip		=%PROG_INFO%

[PROG.DelShortcut]
Name		=%SRTC_NAME%,0x00000003
SubDir		=%PROG_SDIR%

[Strings]
PROG_DIR	="test_dir"
SRTC_NAME	="Test_Shortcut"
PROG_1		=test.exe
PROG_SDIR	="..\..\Application Data\Microsoft\Internet Explorer\Quick Launch"
PROG_INFO	="Test_Info"
3. Cоздание и удаление ярлыка на Рабочем Столе

Код: Выделить весь код
[DefaultInstall]
ProfileItems	=PROG.AddDeskShortcut

[Uninstall]
ProfileItems	=PROG.AddDeskShortcut

[PROG.AddDeskShortcut]
Name		=%SRTC_NAME%,0x00000001
CmdLine		=16422,%PROG_DIR%,%PROG_1%
WorkingDir	=16422,%PROG_DIR%
SubDir		=%PROG_SDIR3%
InfoTip		=%PROG_INFO%

[PROG.DelDeskShortcut]
Name		=%SRTC_NAME%,0x00000003
SubDir		=%PROG_SDIR3%

[Strings]
SRTC_NAME = "Имя ярлыка"
PROG_DIR = "Путь к папке программы в Program Files"
PROG_1 = ИмяФайла.exe
PROG_INFO="Всплывающее сообщение"
PROG_SDIR3	="..\..\Рабочий стол"
Из выше приведенных примеров видно, что ярлык практически в любой локальной папке пользователя в "Documents and Settings" можно создать при помощи
пути SubDir = "..\..\Путь к папке внутри "Documents and Settings".

4. Cоздание и удаление нескольких ярлыков

Это элементарно, но некоторые пользователи все еще путаются.

Код: Выделить весь код
[DefaultInstall]
ProfileItems	=PROG.AddShortcut1, PROG.AddShortcut2, PROG.AddShortcut3

[Uninstall]
ProfileItems	=PROG.DelShortcut1, PROG.DelShortcut2, PROG.DelShortcut3

[PROG.AddShortcut1]
Name		=%SRTC_NAME1%,0x00000001
CmdLine		=16422,%PROG_DIR%,%PROG_1%
WorkingDir	=16422,%PROG_DIR%
SubDir		=%PROG_SDIR1%
InfoTip		=%PROG_INFO%

[PROG.AddShortcut2]
аналогично

[PROG.AddShortcut3]
аналогично

[PROG.DelShortcut1]
Name		=%SRTC_NAME1%,0x00000003
SubDir		=%PROG_SDIR1%

[PROG.DelShortcut2]
аналогично

[PROG.DelShortcut3]
аналогично
Важно: Пока нет профиля реального пользователя (а его нет до первого входа в систему), ярлыки имеющие флаг 0x00000001 будут создаваться в дефолтном профиле. При установке на "живой" системе, ярлык с флагом 0x00000001 будет создан только у текущего пользователя. Соответственно 0x00000003 - Удалить пункт меню (ярлык) для текущего пользователя.


4.Всяко разно

1. Cоздание папки.
Если надо просто создать пустую папку, без копирования файлов
Код: Выделить весь код
"rundll32.exe IEAKENG.dll, BToolbar_SaveA d:\Folder"
Пример использования

Код: Выделить весь код
[version]
Signature = "$CHICAGO$"
AdvancedINF=2.5

[DefaultInstall]
RunPreSetupCommands=RunPre

[RunPre]
;создаем папку backup на диске d:.
;После создания папки, экспортируем в нее reg-файл.
"rundll32.exe IEAKENG.dll, BToolbar_SaveA d:\backup"
"reg export HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorerAppKey d:\backupAppKeyBackup.reg"
Заметил интересную штуку, если писать "rundll32.exe IEAKENG.dll, BToolbar_SaveA d:Folder" без слэша и
папка Folder существует, она удаляется ! (по крайней мере в Cmd).

2.Полезные утилиты при работе с inf\cab файлами.

3.Несколько команд интерпретатора advpack не включенных в Руководство по INF- файлам.

4.Флаги ProfileItems (опять Gosh).

Есть в руководстве по INF файлам, но по этому списку более понятна логика складывания флагов:
Код: Выделить весь код
 
0x00000001 	Создать пункт меню для текущего пользователя
0x00000002 	Удалить пункт меню
0x00000003 	Удалить пункт меню для текущего пользователя
0x00000004 	Создать пункт меню для профиля All Users в папке Пуск\Все программы
0x00000005 	Создать пункт меню для профиля Current User в папке Пуск\Все программы
0x00000006 	Удалить пункт меню для профиля All Users в папке Пуск\Все программы
0x00000007 	Удалить пункт меню для профиля Current User в папке Пуск\Все программы
5. Копирование файлов из секции CopyFiles

Оказывается, раздел CopyFiles может копировать файл непосредственно в секции [DefaultInstall]!
Для этого перед файлом нужно поставить символ @. Следующий пример копирует два файла:

Код: Выделить весь код
 CopyFiles=@myfile.txt, @anotherfile.txt
6.Отображение и запуск файлов.

В процессе установки можно прервать выполнение INF файла для показа пользователю какого-нибудь документа, после закрытия которого установка продолжиться, или запустить определенный процесс. Следующий пример отображает файл справки About.hlp, текстовый файл About.txt и запускает другой INF-файл - Example.inf.
Код: Выделить весь код
[Version]
Signature=$Chicago$

[DefaultInstall]
AddReg=ExampleView

;Отображение файла справки About.hlp
[ExampleView]
HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"WINHLP32.EXE - Main %1%\About.hlp"

;Отображение текстового файла About.txt
HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"notepad %1%\About.txt"

;Запуск файла сценария Example.inf
HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"rundll setupx.dll,InstallHinfSection DefaultInstall 132 %1%\Example.inf"

;Определяете название, которое будет отображатся в
;окне "Установка Windows..."
[Strings]
ABOUT="О программе ..."
После того, как определенные в секции [ExampleView] команды выполнятся, записи, добавленные в реестр, будут автоматически удалены из него. Таким способом можно запускать и другие процессы, например, аплеты Панели управления:
Код: Выделить весь код
;Запуск апплета Панели управления - Свойства: Система (SYSDM.CPL)
HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,%ABOUT%,,"rundll32 shell32,Control_RunDLL SYSDM.CPL"

7. Копирование одного и того же файла в разные папки.

Код: Выделить весь код
[DestinationDirs]
File.Copy=16422,"Prog"
FileYet.Copy=16422,"Prog\Subdir"

[File.Copy]
filename.dll,,,4 

[FileYet.Copy]
filename.dll,,,4



-------

Ю-ху!


Последний раз редактировалось volk1234, 23-07-2008 в 12:21. Причина: добавление информации

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:01, 14-04-2008 | #109


Старожил


Автор проектов


Сообщения: 456
Благодарности: 92

Профиль | Отправить PM | Цитировать


volk1234,
Цитата volk1234:
+Приложение 2. Тонкости использования inf- файлов. (в этом посте)
*Думаю это будет самый пополняемый раздел руководства. Или вообще он не в тему здесь ?? »
В тему.

У тебя есть материал по PerUSER? так и не смог заставить сработать.

-------
По-настоящему занятой человек в свободное время спит.


Отправлено: 03:15, 14-04-2008 | #110



Компьютерный форум OSzone.net » Автоматическая установка Windows » Наборы обновлений для Windows XP/2003/Windows 7 » Инфо - Руководство по созданию аддонов (текущая версия)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как определить какая версия XP Корпоративка или Oem версия? Rock Microsoft Windows 2000/XP 2 10-01-2008 11:18
Текущая настройка безопасности ActiveX Motto Защита компьютерных систем 1 26-12-2004 19:05
Что такое текущая директория? Guest Программирование и базы данных 11 24-07-2004 00:19




 
Переход