Общее·количество·просмотров·страницы
пятница, 29 июля 2011 г.
суббота, 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]
[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 файлы широко применяются у мелкомягких в установке программ и драйверов.
среда, 6 июля 2011 г.
Ремонт флешки.
Произошла вот такая херня-взяла и перестала открываться флэха.Что только с ней не делал:форматировал,низкоуровнево форматировал,запускал в разных режимах.Нет и все тут.Пришлось лезть внутрь.По лечению флешек я тогда вообще ничего не знал.Но как гр-тся все познается на личном опыте.вскрыв корпус я увидел чип.На чипе важно знать имя контроллера на первом фото показан красной стрелкой.Узнать имя контроллера можно по надписи на нем.Второе что важно знать это имя микросхемы памяти,как правило также написано на микросхеме.Если надписей нет(китайская флешка вероятнее всего) узнать можно с помощью специальной утилиты (utlite).Также нужно определить VID и PID идентификаторы.У каждого USB устройства существуют уникальные идентификаторы: VID - идентификатор производителя и PID - идентификатор устройства.По VID и PID можно определить тип контроллера установленного во флэшке.
Когда определили все выше указанное по названиям ищется спец утилита.То есть на примере моей флешки:
контроллер Alcor 6987
VID 058F
PID 6387
производство TRANSCEND
на микросхеме памяти надписи отсутствуют (:))
Берем для начала утилиту для alcor 698X то есть для любого alcor 6987 6989 и т.д.Если сразу все прошло успешно-можно радоваться.но у меня все не как у людей и утилита отказалась работать.По фотке видно что память флешки оказалась специфичной (5T2F) тогда ищем утилиту по памяти.Как раз подошла эта AlcorMP AU698x UFD 5T2F.После ремонта желательно (хотя и не обязательно) отформатировать флешку.Да кстати,советую проводить все манипуляции на ХР СП2 ибо другие системы могут не дать сработать утилите.
Контроллер
Когда определили все выше указанное по названиям ищется спец утилита.То есть на примере моей флешки:
контроллер Alcor 6987
VID 058F
PID 6387
производство TRANSCEND
на микросхеме памяти надписи отсутствуют (:))
Берем для начала утилиту для alcor 698X то есть для любого alcor 6987 6989 и т.д.Если сразу все прошло успешно-можно радоваться.но у меня все не как у людей и утилита отказалась работать.По фотке видно что память флешки оказалась специфичной (5T2F) тогда ищем утилиту по памяти.Как раз подошла эта AlcorMP AU698x UFD 5T2F.После ремонта желательно (хотя и не обязательно) отформатировать флешку.Да кстати,советую проводить все манипуляции на ХР СП2 ибо другие системы могут не дать сработать утилите.
Контроллер
Микросхема памяти(кстати посмотрите сверху надпись-имя контроллера)
Овалом обведена память.
Подписаться на:
Сообщения (Atom)