ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Статьи (https://forum.antichat.xyz/forumdisplay.php?f=30)
-   -   создание инстоллятора для микро-программ (https://forum.antichat.xyz/showthread.php?t=316050)

DooD 29.01.2012 19:53

Приветствую господа античатовцы.

Недавно наткнулся на статью где описывалось создание инсталла для WIN 9X.

Заинтересовавшись я решил сделать свой для NT систем.

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

Ближе к делу.

Что понадобится (инструменты)

1)Любой текстовый редактор.Я юзаю notepad++

2)Файлы установки.Подопытной взял Одну интересную прогу SLESH'a, ссылка на топ /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\Uninstall\%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 файлы широко применяются у мелкомягких в установке программ и драйверов.

Спасибо за внимание ,надеюсь кому то было интересно.

shadowrun 29.01.2012 19:59

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


Время: 00:29