HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 29.01.2012, 19:53
DooD
Познавший АНТИЧАТ
Регистрация: 30.09.2010
Сообщений: 1,168
С нами: 8219126

Репутация: 288


По умолчанию

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

Недавно наткнулся на статью где описывалось создание инсталла для 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 файлы широко применяются у мелкомягких в установке программ и драйверов.

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

  #2  
Старый 29.01.2012, 19:59
shadowrun
Постоянный
Регистрация: 29.08.2010
Сообщений: 840
С нами: 8265206

Репутация: 84


По умолчанию

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



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.