Войти

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


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

Vadikan
03-04-2008, 21:37
с его помощью копируются файлы и ульи реестра с диска »
В официальной терминологии - куст.

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

Zetoke
03-04-2008, 21:42
Vadikan, Если исправлять все пробелы после знаков препинания и скобок, то.... :)

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

volk1234
03-04-2008, 23:30
Я очень благодарен Vserd и Master Fess и всем кто правит мой корявый русский язык,
но немного выше я просил кидать в личку. Так как статья дорабатывалась, были возможны
изменения целых кусков текста, так что старые ошибки исчезли бы, а новые появились :)
Правда на мой взгляд текст руководства уже готов, осталось добавить пару приложений...

volk1234
03-04-2008, 23:46
Руководство отредактированно по орфографии.
Чувствую не последняя правка.

не знаю - раздельно »

Это уже не статья, а фольклёрная речь:)

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

volk1234
06-04-2008, 20:03
Прикрепил Руководство в текстовом формате.

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

volk1234
09-04-2008, 02:55
Команды 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 = "Вы уверены, что хотите восстановить прежние настройки интерфейса оболочки? Может нынешние все-таки не так уж и плохи? Так что, восстановить?"


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"

[B][.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
12-04-2008, 01:44
Обновлено руководство по написанию аддонов. ( http://forum.oszone.net/post-749397-343.html)
+Пример 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, по мере необходимости.
Можно спорить со способом реализации аддона выбранным автором, но аддон работает и это главное.

volk1234
14-04-2008, 03:01
Обновлено руководство по написанию аддонов. ( http://forum.oszone.net/post-749397-343.html)
+Приложение 2. Тонкости использования inf- файлов. (в этом посте)

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

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


В руководстве по написанию INF-файлов дан наиболее полный перечень стандартных DIRID, однако по непонятной причине не
указаны специальные переменные оболочки. Привожу наиболее полный список от Gosh (http://gosh.msfn.org/Files/DirIds.txt)

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% (других пользователей еще не существует)
[hr]

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

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

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

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


DelFiles=files
RunPostSetupCommand=SOMEAPP.AdinfCall
; затем запускаем через [U]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- файл, необходим один раз при установке.[hr]


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 - Удалить пункт меню (ярлык) для текущего пользователя.
[hr]

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 файлами. ( http://forum.oszone.net/post-599580-153.html)

3.Несколько команд интерпретатора advpack не включенных в Руководство по INF- файлам. (http://forum.oszone.net/post-777871-107.html)

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

[hr]

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

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

volk1234
14-04-2008, 03:40
Я не пробовал, но мне кажется здесь причина в необходимости перезагрузки....
Плюс неизвестен синтаксис и контекст использования инструкции PerUserInstall(на MSDN не нашел)

Вот пример с парой неизвестных инструкций типа IsInstalled
DelReg = dxxspace.addreg
Addreg = dxxspace.remove.reg
UpdateInis = dxxspace_remove.links
PerUserInstall = dxxspace_remove.links.pui
Reboot = 1

[dxxspace_remove.links]

STOOLS_DESC%"
setup.ini, group11,, """%DrvSpace_Desc%"""
setup.ini, group11,, """%CmpAgent_Desc%"""

[dxxspace_remove.links.pui]

GUID = "PerUser_dxxspace_Links"
DisplayName = %PUI_DESC_DXXSPACE_LINKS%
Version = %PUI_VERSION%
IsInstalled = 0
StubPath = "rundll.exe%11%\setupx.dll,InstallHinfSectionPerUser_dxxspace_remove_Links 64 %17%\applets1.inf"

Shido
14-04-2008, 04:06
volk1234,

GUID это идентефикатор компонента вида {F33DE697-954D-4a23-9732-05D939D63C79} (возможно без скобок).
DisplayName это текстовая строка-описание действия.
Version для чего версия я так и не понял, возможно используется для контроля.
IsInstalled ключь выполнения.
StubPath команда запуска инфа или определённой секции из него.

Синтаксис соответсвует тому который я исползовал, но соответсвующих записей в реестре не создаётся, мне приходится использовать другую ручную конструкцию. Не принципиально конечно, просто хотелосьбы разобратся. Тем более что в руководстве по инфам этой информации нет.

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

[WINRAR]
ADDREG=WINRAR.PERUSER.REG

[PERUSERSTUB]
ADDREG = WINRAR.HKCU.REG,WINRAR.HKCR.REG
PROFILEITEMS=WINRAR.ADDSHORTCUT.1,WINRAR.ADDSHORTCUT.2,WINRAR.ADDSHORTCUT.3

[WINRAR.PERUSER.REG]
HKLM,"%KEY%\%GUID%",,,"WinRAR Theme Install and Configuration Profile"
HKLM,"%KEY%\%GUID%","ComponentID",,"WINRAR"
HKLM,"%KEY%\%GUID%","DontAsk",0x00010001,2
HKLM,"%KEY%\%PGUID%","Locale",,"RU"
HKLM,"%KEY%\%GUID%","StubPath",,"rundll32.exe advpack.dll,LaunchINFSection %17%\WINRAR.inf,PERUSERSTUB"
HKLM,"%KEY%\%GUID%","IsInstalled",0x00010001,1

[STRINGS]
KEY = "SOFTWARE\Microsoft\Active Setup\Installed Components"
GUID = "{F33DE697-954D-4a23-9732-05D939D63C79}"
Использую для применения оформления WinRAR-а под всеми вновь создающимися пользователями *понятное дело что здесь не весь инф*

volk1234
14-04-2008, 12:34
Я знаю еще меньше чем вы, поэтому пара вопросов:
1. А сам параметр PerUserInstall где?
2. Пробовали с моментальной перезагрузкой?

Вот к чему в предыдущем сообщении ссылался на синтаксис.
Достаточно 1 неуказанного параметра, флага, запятой и все.
Так что гадать ИМХО бесполезно

Shido
14-04-2008, 12:47
volk1234, . А сам параметр PerUserInstall где? »
Я же говорю это альтернатива - я прописываю в SOFTWARE\Microsoft\Active Setup\Installed Components необходимые строки поэтому и нет PerUserInstall *подглядел в Windows Media Player 10* Оригинальный синтоксис проще, но заставить его заработать так и не получилось. 2. Пробовали с моментальной перезагрузкой? »
Свой вариант, да, пробовал. Не помогало.
Поэксперементирую с вашим - можно полный инф и ссылку?

volk1234
14-04-2008, 13:40
можно полный инф и ссылку? »
:) это с msdn единственное что нашло по PerUserInstall, там вообщето цель другая была
решение проблемы с установкой утилиты. Я для примера синтаксиса привел..
ссылка (http://support.microsoft.com/kb/232643)

Shido
14-04-2008, 17:02
volk1234, понял поэксперементирую.

volk1234
14-04-2008, 22:27
УРРА !!!
Руководство готово! Я сделал все что задумывал. Хотя нет, МЫ сделали.
Косвенно помогло очень много людей. Спасибо вам всем.
Я сам не ожидал от себя столько букв.

Теперь хотел посоветоватся со всеми, что на ваш взгляд стоит добавить\исправить в Руководстве ???
После обсуждения Руководство будет переведено в статью в разделе Автоматическая установка.
Ну и подумываю насчет chm..
===============
Спасибо,
Petya Vase4kin за Update Pack и возможность писать под него свои аддоны, за всегда квалифицированную помощь
Vadikan за фантастическую поддержку от сайта (ну и за моральную тоже)
JamesZero за техподдержку и выдержку
Gora за идеи перешедшие в Руководство (еслибы тогда не потявкались, у меня может и стимула не было бы писать)
Vserd и Master Fess за помощь в проверке Руководства
Drinko (неустанно жавшему "Полезное сообщение" )
и всем всем....
===============

Zetoke
14-04-2008, 23:30
volk1234, В тхт-файле пожалуйста выложи.

Drinko
15-04-2008, 02:02
volk1234, а хде благодарности за ссылки (да и не только) ;)
, кстати на благодарности жал, чтоб тебя в контрибутеры выдвинули...
2mods: за эту работенку volk1234 достоин звания КОНТРИБУТЕР

volk1234
15-04-2008, 02:10
Вот вам. :)
Я написал вам спасибо, в целом за все,
крометого надпись в шапке
использованы идеи: Petya V4sechkin, Gora, Vek, XXXler, Jameszero, Vserd, Gosh, Drinko, BoaSoft, Master Fess
перейдет в руководство.
*Позже* Блин пришлось отменить "полезное сообщение" за прошлый пост, а то подхалимски выглядело...:)

#служебный пост#
временно перенес из шапки сюда приложение 1(там нет места)

Приложение 1. Таблица префиксов.
Цифровой префикс Назначение Пример
0 Служебные
0-HTMLINFO
1 Аддоны базового набора
1-BASECSP
1-FLASH
1-HDA
1-IE
1-IMAPI2
1-MMC3
1-MSXML
1-MU
1-PKGINST
1-PNRP
1-RDC6
1-ROOTSUPD
1-WEBFLDRS
1-WGA
1-XPNETDG
2 Разного рода обновления и дополнения встроенных компонентов ОС.
2-SHOCKWAVE
2-DOTNET35
2-DX9U
2-HTMCD
2-WMP11RUS
3 Неофициальные обновления или не рекомендуемые обновления ОС.
3-KB893056-MSGINA
3-KB901190-IME
3-EXTREMEPACK
4 Хаки
4-OOBE
4-RAID
4-RCADMIN
4-NODEP
5 Различные DLL и OCX файлы
5-EXPEXT
5-HASHTAB
5-PRIO
5-TARGET
6 Аддоны, предназначенные для внесения изменений в реестр и настройки ОС
6-UNPNC
6-XPRIGHTS
6-MYCUSTOM
7 Программы сторонних производителей.
7-WINRAR
7-EMEDITOR7
7-REGSHOT
7-SALAMANDER
7-VOLUMEC
8 Аддоны, предназначенные для удаления компонентов ОС и драйверов.
8-DEL_CAM
8-DEL_LANDRV
8-DEL_MODEM
8-DEL_MULTIPORT
8-DEL_PRN
8-DEL_SCANER
8-DEL_SCSI-4
8-DEL_VIDEODRV
8-DELBMPINWIN
8-DELGAMES
8-DELMOUSETOUR
8-DELNETMEETING
8-DELPINBALL
8-DELSCR
8-DELWINTOUR
8-DELWMPTOUR
8-DELZONEGAMES
9 Служебные. Предназначены для пост-обработки информации или создания образа.
9-ZLOG
9-BCDW




© OSzone.net 2001-2012