Приветствую господа античатовцы. Недавно наткнулся на статью где описывалось создание инсталла для WIN 9X. Заинтересовавшись я решил сделать свой для NT систем. Суть заключается в написании просто inf файла который установит нашу маленькую программу.Почему не взять нормальные программы для создания инсталл пакетов?Да они хороши,но для больших программ,для маленькой не оправдает средства. Ближе к делу. Что понадобится (инструменты) 1)Любой текстовый редактор.Я юзаю notepad++ 2)Файлы установки.Подопытной взял Одну интересную прогу SLESH'a, ссылка на топ https://forum.antichat.ru/showthread.php?p=2199120 3)Любой компилируемый язык программирования работающий с api функциями.(я использовал assembler) начнем Итак я буду писать код inf файла и раскоментирую все подробно. Создаем заголовок Code: [Version] Signature=$Chicago$ сигнатура $chicago$ говорит о том что установка может проводиться на всей линейке ос MS WIN Code: [strings] APP_NAME="Slil_ru_file_uploader" DIR="Progra~1\slil" Эта секция зарезервирована и должна только так называться.Она содержит название приложения и путь для установки. Code: [SourceDisksNames] 1 = %APP_NAME%,"",1 Имя диска установки. Читается из секции [strings] Code: [SourceDisksFiles] install.inf=1 slil.exe=1 help.txt=1 Это файлы которые будут копироваться. Code: [Optional Components] DefaultInstall стандартная установка (не обяз.) описуем секцию установки Code: [DefaultInstall] CopyFiles = CopyINFfiles,mainfiles UpdateInis = AddShortcuts AddReg = AddUninstall ProfileItems =AddShortcut CopyFiles- файлы для копирования UpdateInis = AddShortcuts- создание ярлыков AddReg = AddUninstall- внесение информации в реестр (удаление будет происходить через апплет установка и удаления программ) ProfileItems =AddShortcut - также создание/удаление ярлыков,только в разных группах Code: [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 выводим конечное сообщение. Code: [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.+ имя экзэшника.Соотв.и удаляем его же. Code: [DestinationDirs] mainfiles=24,%DIR% CopyINFfiles =17 Каталог назначения (что куда копировать) в секции главных файлов (будет дальше) копируем в програм файлс. Путь как в ДОС 8 символов два последних ~1 CopyINFfiles =17 каждая директория диска имеет номер 17- C:\windows\inf помещаем туда наш установочный файл,который будет использован апллетом для удаления файлов и инф. Code: [CopyINFfiles] install.inf,,,1 [mainfiles] slil.exe help.txt секции с файлами Code: [AddShortcuts] setup.ini, progman.groups,, "group1=""%APP_NAME%""" setup.ini, group1,, """SlilFU"",""""""%24%\Progra~1\slil\slil.exe"""""",,,,""%24%\Progra~1\slil"",""slil.exe""" Создаем ярлык в программной группе в пуск Code: [DelShortcuts] setup.ini, progman.groups,, "group1=""%APP_NAME%""" setup.ini, group1,, """SlilFU""" удаляем. Code: [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 Code: [DelUninstall] HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%APP_NAME%" удаление ключа. Code: [BeginUPromptSection] Prompt = "Вы действительно хотите удалить программу?" ButtonType = YESNO Title = Удаление... [UninstallEndPrompt] Prompt = "Программа успешно удалена!" Сообщения при деинсталяции. Вот собсно и все. Только вот по дефолту инф файлы открываются блокнотом,по этому не помешало бы написать микро-лаунчер.я буду делать на ассемблере пояснения(хах,там вызов 3-4 функций)в коментах Code: ;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 файлы широко применяются у мелкомягких в установке программ и драйверов. Спасибо за внимание ,надеюсь кому то было интересно.
Спасибо. Я обычно на дельфе с помощью реестра извращаюсь, когда инсталл пакет делаю. Теперь буду знать новый способ