Общее·количество·просмотров·страницы

суббота, 23 июля 2011 г.

Создание Установочного пакета.INF+ASSEMBLER

Приветствую господа.
Недавно наткнулся на статью где описывалось создание инсталла для WIN 9X.
Заинтересовавшись я решил сделать свой для NT систем.
Суть заключается в написании просто inf файла который установит нашу маленькую программу.Почему не взять нормальные программы для создания инсталл пакетов?Да они хороши,но для больших программ,для маленькой не оправдает средства.
Ближе к делу.
Что понадобится (инструменты)
1)Любой текстовый редактор.Я юзаю notepad++
2)Файлы установки.Подопытной взял Одну интересную прогу SLESH'a, ссылка на топ https://forum.antichat.ru/showthread.php?p=2199120
3)Любой компилируемый язык программирования работающий с api функциями.(я использовал assembler)

начнем

Итак я буду писать код inf файла и раскоментирую все подробно.
Создаем заголовок


 [Version]
Signature=$Chicago$

сигнатура $chicago$ говорит о том что установка может проводиться на всей линейке ос MS WIN


 [strings] 
APP_NAME="Slil_ru_file_uploader" DIR="Progra~1\slil"


Эта секция зарезервирована и должна только так называться.Она содержит название приложения и путь для установки.


 [SourceDisksNames] 
 1 = %APP_NAME%,"",1


Имя диска установки.
Читается из секции [strings]


 [SourceDisksFiles]
 install.inf=1 
slil.exe=1 
help.txt=1

Это файлы которые будут копироваться.
[Optional Components] 
DefaultInstall


стандартная установка (не обяз.)

описуем секцию установки


[DefaultInstall] 
CopyFiles = CopyINFfiles,mainfiles 
 UpdateInis = AddShortcuts 
AddReg = AddUninstall 
ProfileItems =AddShortcut



CopyFiles- файлы для копирования
UpdateInis = AddShortcuts- создание ярлыков
AddReg = AddUninstall- внесение информации в реестр (удаление будет происходить через апплет установка и удаления программ)

ProfileItems =AddShortcut - также создание/удаление ярлыков,только в разных группах
[DefaultUninstall] 
BeginPrompt = BeginUPromptSection 
DelFiles = CopyINFfiles,mainfiles
 UpdateInis = DelShortcuts 
DelReg = DelUninstall 
EndPrompt = UninstallEndPrompt 
ProfileItems =DelShortcut


а это у нас секция удаления.

BeginPrompt = BeginUPromptSection тут мы выводим сообщение о подтверждении удаления программы
DelFiles = CopyINFfiles,mainfiles -собсна,удаляем скопированные файлы
UpdateInis = DelShortcuts,ProfileItems =DelShortcut -удаляем ярлыки
DelReg = DelUninstall -удаляем ключи
EndPrompt = UninstallEndPrompt выводим конечное сообщение.

 [AddShortcut] 
Name = "zalil",0x00000008,9 
CmdLine = 16422,"slil",slil.exe 

[DelShortcut] Name = "Zalil",0x0000000A,9


Вот отличительное свойство.В своем треде Slesh писал что было бы удобно кинуть файл в send_to чтобы отправлять быстрее было.Установщик сделает это сам.
Что тут что значит:
name= "zalil" -что будет отображаться
,0x00000008,9="%UserProfile%\SendTo" то-бишь создаем ярлык там.
CmdLine = 16422,"slil",slil.exe Cmdline -путь к исполняемому файлу с парам. ProgramFiles.+ имя экзэшника.Соотв.и удаляем его же.

[DestinationDirs] 
mainfiles=24,%DIR% 
CopyINFfiles =17

Каталог назначения (что куда копировать)
в секции главных файлов (будет дальше) копируем в програм файлс. Путь как в ДОС 8 символов два последних ~1
CopyINFfiles =17 каждая директория диска имеет номер 17- C:\windows\inf
помещаем туда наш установочный файл,который будет использован апллетом для удаления файлов и инф.

 [CopyINFfiles] 
install.inf,,,1 

 [mainfiles] 
slil.exe 
help.txt

секции с файлами
 [AddShortcuts] 
setup.ini, progman.groups,, "group1=""%APP_NAME%""" 
setup.ini, group1,, """SlilFU"",""""""%24%\Progra~1\slil\slil.exe"""""",,,,""%24%\Progra~1\slil"",""slil.exe"""


Создаем ярлык в программной группе в пуск


 [DelShortcuts] 
setup.ini, progman.groups,, "group1=""%APP_NAME%""" 
setup.ini, group1,, """SlilFU"""


удаляем.


Код: [AddUninstall] 
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%APP_NAME%","DisplayName",,"slil_ru_FU" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%APP_NAME%","UninstallString",,"RunDll32 advpack.dll,LaunchINFSection %17%\install.inf, DefaultUninstall"

Вносим инфу в реестр.1)Сдесь будет отображаться текст в апллете.
2)Запускается секция [DefaultUninstall]
дело в том что в венде имеется два интерпретатора inf файлов это setupapi и advpack оба находятся в динамических библиотеках,каждый имеет свои параметры,подробнее можно прочитать по ссылке в конце статьи,
%17%...ю я описывал выше,тут запустится наш инсталл файл из C:\windows\inf


[DelUninstall] 
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\%APP_NAME%"

удаление ключа.

 [BeginUPromptSection] 
Prompt = "Вы действительно хотите удалить программу?" 
ButtonType = YESNO 
 Title = Удаление... 

 [UninstallEndPrompt] 
Prompt = "Программа успешно удалена!"

Сообщения при деинсталяции.

Вот собсно и все.
Только вот по дефолту инф файлы открываются блокнотом,по этому не помешало бы написать микро-лаунчер.я буду делать на ассемблере
пояснения(хах,там вызов 3-4 функций)в коментах


Код: ;This program was created in assembler editor 
.386 .model flat,stdcall 
option casemap:none 
 include include\windows.inc 
include include\shell32.inc 
include include\kernel32.inc 
include include\user32.inc 
include macros\macros.asm 

includelib lib\kernel32.lib
includelib lib\shell32.lib 
includelib lib\user32.lib 

.code 
 start:
 invoke GetFileAttributes,CTXT("setup\install.inf") ; проверяем наличие установочного файла 
.IF eax==INVALID_FILE_ATTRIBUTES ; если возврат INVALID_FILE_ATTRIBUTES то файла не существует
 invoke MessageBox,0,CTXT("Файл установки отсутствует!"),0,0 ; известим об этом 
.ELSE
 invoke ShellExecute,0,CTXT("install"),CTXT("setup\install.inf"),0,0,SW_SHOW ; иначе устанавливаем наш файл 
.ENDIF 
invoke ExitProcess,0 
 end start


после компиляции с сжатия FSG получаем ланчер в 877 байт.
помещаем инстал файлы в папку setup, а install.exe снаружи.
Программа Slesh'a весит 7,5 кб
inf файл 1,85 кб
help.txt 943 байта
install.exe 877 байт

размер дистрибутива > устанавливаемой программы на 3707 байт.

кладем все через hamster в 7Z и получаем установочник весом 5,03 кб то есть даже меньше чем исходная программа.
Также inf файлы широко применяются у мелкомягких в установке программ и драйверов.

Комментариев нет:

Отправить комментарий