Приветствую господа.
Недавно наткнулся на статью где описывалось создание инсталла для WIN 9X.
Заинтересовавшись я решил сделать свой для NT систем.
Суть заключается в написании просто inf файла который установит нашу маленькую программу.Почему не взять нормальные программы для создания инсталл пакетов?Да они хороши,но для больших программ,для маленькой не оправдает средства.
Ближе к делу.
Что понадобится (инструменты)
1)Любой текстовый редактор.Я юзаю notepad++
2)Файлы установки.Подопытной взял Одну интересную прогу SLESH'a, ссылка на топ https://forum.antichat.ru/showthread.php?p=2199120
3)Любой компилируемый язык программирования работающий с api функциями.(я использовал assembler)
начнем
Итак я буду писать код inf файла и раскоментирую все подробно.
Создаем заголовок
[Version]
[BeginUPromptSection]
Недавно наткнулся на статью где описывалось создание инсталла для 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]
сигнатура $chicago$ говорит о том что установка может проводиться на всей линейке ос MS WIN
[strings]
APP_NAME="Slil_ru_file_uploader" DIR="Progra~1\slil"
Эта секция зарезервирована и должна только так называться.Она содержит название приложения и путь для установки.
[SourceDisksNames]
Эта секция зарезервирована и должна только так называться.Она содержит название приложения и путь для установки.
[SourceDisksNames]
1 = %APP_NAME%,"",1
Имя диска установки.
Читается из секции [strings]
Имя диска установки.
Читается из секции [strings]
[SourceDisksFiles]
install.inf=1
slil.exe=1
help.txt=1
Это файлы которые будут копироваться.
Это файлы которые будут копироваться.
[Optional Components]
DefaultInstall
стандартная установка (не обяз.)
описуем секцию установки
[DefaultInstall]
стандартная установка (не обяз.)
описуем секцию установки
[DefaultInstall]
CopyFiles = CopyINFfiles,mainfiles
UpdateInis = AddShortcuts
AddReg = AddUninstall
ProfileItems =AddShortcut
CopyFiles- файлы для копирования
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]
а это у нас секция удаления.
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]
Вот отличительное свойство.В своем треде 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]
Каталог назначения (что куда копировать)
в секции главных файлов (будет дальше) копируем в програм файлс. Путь как в ДОС 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]
Создаем ярлык в программной группе в пуск
[DelShortcuts]
setup.ini, progman.groups,, "group1=""%APP_NAME%"""
setup.ini, group1,, """SlilFU"""
удаляем.
Код: [AddUninstall]
удаляем.
Код: [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]
Вносим инфу в реестр.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
Сообщения при деинсталяции.
Вот собсно и все.
Только вот по дефолту инф файлы открываются блокнотом,по этому не помешало бы написать микро-лаунчер.я буду делать на ассемблере
пояснения(хах,там вызов 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 файлы широко применяются у мелкомягких в установке программ и драйверов.
после компиляции с сжатия FSG получаем ланчер в 877 байт.
помещаем инстал файлы в папку setup, а install.exe снаружи.
Программа Slesh'a весит 7,5 кб
inf файл 1,85 кб
help.txt 943 байта
install.exe 877 байт
размер дистрибутива > устанавливаемой программы на 3707 байт.
кладем все через hamster в 7Z и получаем установочник весом 5,03 кб то есть даже меньше чем исходная программа.
Также inf файлы широко применяются у мелкомягких в установке программ и драйверов.
Комментариев нет:
Отправить комментарий