Публикация не была найдена — Студопедия
Поделись
Самораспаковывающийся архив(SFX-архив) — файл, компьютерная программа, объединяющая в себе архив и исполняемый код для его распаковки. Такие архивы, в отличие от обычных, не требуют отдельной программы для их распаковки (получения исходных файлов, из которых они созданы), если исполняемый код можно выполнить в указанной операционной системе. Это удобно, когда неизвестно, есть ли у пользователя, которому передаётся архив, соответствующая программа распаковки.
Основной способ использования самораспаковывающихся архивов — создание программ для установки ПО без использования систем управления пакетами.
Исполняемый код, присоединённый к архиву, может представлять собой полноценную программу распаковки. Так как существует вероятность выполнения кода распаковщика, самораспаковывающийся архив или замаскированный под него файл может использоваться для распространения вредоносного ПО.
Подготовка к созданию SFX
Вне зависимости от того, что вы будете использовать для создания SFX, различий в подготовке не будет.
WinRar
С его помощью можно создать незаметный (silent) инсталлятор, который распакует содержимое SFX в заданную папку, выполнит заранее указанную команду, а по окончании установки может удалить распакованные файлы. Помимо всего WinRAR умеет добавлять элементы в меню Пуск, помещать ярлыки на Рабочий стол, а также задавать архиву иконку по вашему выбору.
Алгоритм создания SFX архива в WinRar
1 шаг
Выберите нужные файлы в Проводнике Windows.
2 шаг
Щелкните по одному из выделенных файлов правой кнопкой мыши, затем выберите “Добавить в архив”.
3 шаг
Включите опцию “Создать SFX-архив”.
4 шаг
Перейдите на вкладку “Дополнительно”.
5 шагКликните “Параметры SFX”
6 шаг
На вкладке “Общие” можно указать папку распаковки по умолчанию. Если Вы создаете архив с программой, можно указать папку в “Program Files” как папку распаковки.
7 шаг
На вкладке “Текст и графика” можно указать текст и заголовок окна.
8 шаг
Задайте все параметры архива.
9 шаг
Нажмите ОК.
10 шаг
Нажмите ОК.
7-Zip
7-Zip — бесплатный архиватор, распространяющийся по лицензии GNU LGPL. Если вы с ним не знакомы, то более подробную информацию вы найдете на сайте 7-Zip. С его помощью можно создавать бесключевые SFX, хотя процесс их создания несколько длиннее, чем у WinRAR.
Cпособ 1: выбираем файлы и папки для архивации. нажимаем “Добавить архив” (”+” зелёный). появится окно. в нём в “Опции” выбираем “Создать SFX-архив” и нажимаем “OK”.
Способ 2: если хочется немного изменить вид программы.
Берём “Res Hacker”, открываем файл 7z.sfx в папке с архиватором “7-zip”, изменяем всё, что нужно, запаковываем “UPX” и заменяем оригинальный файл 7z.sfx в папке с архиватором. Далее по способу 1.
Способ 3: создать архив 7z, взять sfx из папки с архиватором (можно поэкспериментировать из способа 2), потом к готовому sfx приписываем 7z архив.
код:
copy /b sfx.exe+archive.7z
Можно сделать этот sfx с XP стилем.
Для этого в Res Hacker открываем sfx файл, жмём “Действия\Добавить новый ресурс”, нажимаем кнопку “Файл с новым ресурсом…”, выбираем файл в архиве. Дальше заполняем согласно изображению.
PureBasic — Создаем самораспаковывающийся ZIP архив.
PureBasic — Создаем самораспаковывающийся ZIP архив.Статьи Главная
Создаем самораспаковывающийся ZIP
архив.
Что из себя представляет самораспаковывающийся архив? Это файл, объединивший в себе два файла – модуль распаковки и собственно архив. Модуль распаковки является обычным исполняемым файлом и его можно написать почти на любом языке программирования, позволяющем работать с архивами нужного формата, в нашем случае, ZIP. Архив в файле находится сразу же после модуля распаковки, то есть, он дописан в конец исполняемого файла. Это конечно же не единственный способ создания самораспаковывающегося архива, но такой метод используется многими архиваторами, в частности, популярной программой WinRAR и мы не будем изобретать колесо, а используем уже проверенные способы.
Для создания модуля распаковки, будем использовать компилятор PureBasic, бесплатную, демонстрационную версию которого, можно скачать на официальном сайте http://purebasic.com/download.php. Там есть разновидности для нескольких платформ, но нам нужна для Windows x86. Кроме того, понадобится библиотека PureZIP, которая позволяет работать с ZIP архивами. Ее можно скачать на сайте http://gnozal.ucoz.com. К статье приложена библиотека PureZIP для компилятора PureBasic версии 4.51, который использовался при разработке рассматриваемых программ.
После того как скачали и установили PureBasic и библиотеку PureZIP для него, можно приступать к кодингу. Для примера был создан относительно не сложный распаковщик архива, окно которого показано на рисунке.
Он позволяет выбрать место (папку) распаковки файлов, а так же отображает прогресс извлечения текущего файла и прогресс распаковки всего архива. Кроме того, если архив защищен паролем, то появится окно для его ввода. Мы не будем углубляться в создание GUI программы и обработчиков событий, поскольку это выходит за рамки данной статьи, и сразу рассмотрим код распаковки архива в заданную папку — процедуру ExtractArchive()
Код:
; Распаковка архива в папку, указанную в переменной ExtractPath.
Procedure ExtractArchive(ExtractPath. s)
GlobalInfo.unz_global_info ; Объявление структур.
FileInfo.PureZIP_FileInfoBreakExtract = #False ; Создание локальных переменных.
DoneFiles = 2 ; Получение данных об первом (индекс 0) файле архива. If PureZIP_GetFileInfo(ProgName, 0, @FileInfo) = #True
If FileInfo\flag & 1 = 1 ; Установленный 0 бит - признак наличия пароля.
Pass.s=InputRequester(GetFilePart(ProgName)+" - Архив защищён паролем!", "Введите пароль архива","")
PureZIP_SetArchivePassword(Pass) ; Устанавливаем пароль, введенный пользователем.
EndIf
EndIfIf PureZIP_Archive_Read(ProgName) ; Открываем архив (исполняемый файл распаковщика).
PureZIP_Archive_GlobalInfo(@GlobalInfo)
NrOfCompressed.l = GlobalInfo\number_entry ; Число файлов в архиве.
ReturnValue.l = PureZIP_Archive_FindFirst() ; Поиск первого файла в архиве.SetGadgetAttribute(#ProgressBar_All, #PB_ProgressBar_Maximum, NrOfCompressed)
; Цикл (While - Wend) распаковки всех файлов, содержащихся в архиве.
While ReturnValue = #UNZ_OK
If PureZIP_Archive_FileInfo(@FileInfo) = #UNZ_OK ; Данные о файле (размер, степень сжатия и др.).
Status = PureZIP_Archive_Extract(ExtractPath, #True, @BreakExtract) ; Распаковка файла на диск.If BreakExtract = #True
MessageRequester("", "Распаковка прервана пользователем", #MB_OK|#MB_ICONINFORMATION)
Break
EndIfIf Status = #UNZ_OK ; Успешная распаковка очередного файла.
DoneFiles + 1
SetGadgetText(#Text_ExtractFiles, Cut_FileName(ExtractPath+FileInfo\FileName))
SetGadgetState(#ProgressBar_All, DoneFiles)
ReturnValue = PureZIP_Archive_FindNext() ; Поиск следующего файла для распаковки.
Else
MessageRequester("","Произошла ошибка при распаковке"+Chr(10)+FileInfo\FileName,#MB_ICONWARNING)
Break
EndIfEndIf
Wend
PureZIP_Archive_Close() ; Закрытие архива.If ReturnValue = #UNZ_END_OF_LIST_OF_FILE
SetGadgetText(#Text_ExtractFiles, "Архив успешно распакован")
MessageRequester(GetFilePart(ProgName), "Архив успешно распакован.", #MB_OK|#MB_ICONINFORMATION)
Else ; Если не все файлы были распакованы (ошибка или операция прервана пользователем).
SetGadgetState(#ProgressBar_File, 0)
SetGadgetState(#ProgressBar_All, 0)
SetGadgetText(#Text_ExtractFiles, "")
EndIf
Else ; Обычно свидетельствует об повреждении архива.
MessageRequester("", "Ошибка при доступе к архиву.", #MB_OK|#MB_ICONERROR)
EndIfEndProcedure
Прежде всего, объявляются структуры и переменные, необходимые для работы с архивом. Далее, выясняется, защищен ли архив паролем. Для этого запрашивается информация об одном из файлов, который имеет нулевой индекс в архиве и анализируется состояние флагов и если нулевой бит установлен, то это признак того, что архив защищен паролем.
В этом случае, при помощи функции InputRequester() будет создано диалоговое окно ввода данных, информирующее пользователя что для распаковки нужен пароль.Введенный пользователем пароль будет передан функции PureZIP_SetArchivePassword(), которая установит текущий пароль архива. После всего этого, можно открыть архив для чтения, что производится при помощи функции PureZIP_Archive_Read(), единственный аргумент которой – абсолютный путь к архиву, то есть к EXE-файлу самораспаковывающегося архива. Он заносится в строковую переменную ProgName при старте программы функцией ProgramFilename(). После успешного получения доступа к архиву, его содержимое можно извлечь в папку, заданную в строковой переменной ExtractPath. Данная операция производится в цикле
Код Callback процедуры показан ниже.
Код:
; Отображение прогресса распаковки обрабатываемого файла.
Procedure File_Progress(File.s, Percent.f, *UserParam)SetGadgetState(#ProgressBar_File, PerCent) ; Отображение в окне прогресса распаковки.
Repeat
Event=WindowEvent(); Текущее событие программы.
If Event=#PB_Event_CloseWindow ; Щелчок по крестику в заголовке окна.
If EventWindow() = #Window_0
Flags = #MB_YESNOCANCEL|#MB_ICONQUESTION|#MB_DEFBUTTON2
Select MessageRequester("", "Закрыть окно с остановкой распаковки файлов?", Flags)
Case #IDYES
End
Case #IDCANCEL
PokeL(*UserParam, #True)
Break
EndSelect
EndIf
EndIfUntil Event = 0
ProcedureReturn 0
EndProcedure
Она зарегистрирована в библиотеке PureZIP при помощи PureZIP_SetCompressionCallback() как функция отображения прогресса упаковки / распаковки файлов. Процедуре передается имя распаковываемого файла, процент его распаковки (в диапазоне 0 … 100) и данные, переданные в необязательном аргументе функции распаковки файла. В нашем случае, это указатель на локальную переменную BreakExtract процедуры ExtractArchive(). Хоть основное назначение процедуры File_Progress() состоит в отображении распаковки файла, но тот факт что при излечении файлов, она вызывается довольно часто, как минимум несколько раз в секунду, позволило возложить на нее еще и обработку событий программы на время распаковки файлов. Иначе бы пришлось распаковывать файлы в отдельном потоке. После того как при помощи функции SetGadgetState() был отображен текущий прогресс распаковки, выполняется код обработки событий программы. В цикле вызывается функция WindowEvent() до тех пор, пока не будут обработана вся очередь событий. Из всех событий, обрабатывается только одно – закрытие окна программы, при возникновении которого, на экране появится окно.
При нажатии на кнопку «Да», работа программы завершится и ее окно закроется. В случае нажатия на кнопку «Нет», распаковка файлов продолжится. А если нажать на кнопку «Отмена», то распаковка файлов прекратится, но программа продолжит свою работу.
После компиляции программы получится модуль распаковки архива, размером 90 КБ. Но архива в нем естественно нет. Его еще предстоит добавить. А как его добавить? Можно конечно заранее создать ZIP архив со всеми требуемыми файлами, а потом дописать его в конец исполняемого файла, любым доступным способом и после архива, указать число добавленных байтов. Но этот метод усложняет создание самораспаковывающегося архива, поэтому создадим небольшую программу, автоматизирующую данный процесс. Ее окно показано на скриншоте.
Программа позволяет создать самораспаковывающийся архив, защищенный паролем из файлов выбранной папки. Исполняемый файл модуля распаковки архива, хранится в секции данных программы.
Код:
; Добавление при компиляции модуля распаковки в EXE файл упаковщика.
DataSection
SFX_File:
IncludeBinary "SFX.exe"
SFX_File_End:
EndDataSection
Он туда помещается при помощи оператора IncludeBinary на этапе компиляции программы. Метки до и после этого оператора, позволяют получить данные, загруженные оператором IncludeBinary. Такой способ хранения модуля распаковки хорош тем, что программа состоит всего из одного исполняемого файла, а один файл хранится внутри другого.
Самораспаковывающийся архив создает процедура Button_Archive().
Код:
; Создание самораспаковывающегося архива.
Procedure Button_Archive(Directory.s, File.s)Error = #True
BreakCompress = #FalseSetGadgetText(#Text_CurrentFiles, "Подсчет файлов. Ждите...")
ClearList( Files() ) ; Очистка динамически связанного списка.
Find_File(Directory, "") ; Поиск файлов, подлежащих архивации.CountFiles = ListSize( Files() ) ; Число найденных файлов.
If CountFiles = 0
MessageRequester("", "В выбранной папке отсутствуют файлы!", #MB_OK|#MB_ICONWARNING)
ProcedureReturn
EndIfSetGadgetAttribute(#ProgressBar_AllProgress, #PB_ProgressBar_Maximum, CountFiles)
SetGadgetText(#Text_CurrentFiles, "Подсчет файлов")
CurrentDir.s = GetCurrentDirectory() ; Путь к текущей папке программы.If CreateFile(2, File) ; Создаем файл самораспаковывающегося архива.
WriteData(2, ?SFX_File, ?SFX_File_End-?SFX_File) ; В начало файла - модуль распаковки архива.
CloseFile(2)Password.s = GetGadgetText(#String_Password) ; Пароль архива.
PureZIP_SetArchivePassword(Password)If PureZIP_Archive_Create(File, #APPEND_STATUS_CREATEAFTER) ; Добавление архива в конец файла.
SetCurrentDirectory(Directory) ; Установка текущей папки.
Count = 0
ForEach Files() ; В цикле упаковываются файлы, имена которых находятся в связанном списке.Count + 1
SetGadgetState(#ProgressBar_AllProgress, Count) ; Увеличение значения прогресса упаковки.
SetGadgetText(#Text_CurrentFiles, Cut_FileName(Directory+Files()))
Status = PureZIP_Archive_Compress(Files(), #True, @BreakCompress) ; Упаковка файла.If BreakCompress = #True
MessageRequester("", "Создание архива прервано пользователем", #MB_OK|#MB_ICONINFORMATION)
Break
EndIf
If Status <> #Z_OK And Status <> -1
MessageRequester("", "Возникла ошибка при упаковке файла"+Chr(10)+Files(), #MB_OK|#MB_ICONERROR)
Break
EndIfNext
PureZIP_Archive_Close() ; Завершение создания архива.
If CountFiles = Count
Error = #False
SetGadgetText(#Text_CurrentFiles, "SFX архив создан")
MessageRequester("", "Самораспаковывающийся архив создан.", #MB_OK|#MB_ICONINFORMATION)
EndIf
Else
MessageRequester("", "Ошибка доступа к файлу при добавлении архива!", #MB_OK|#MB_ICONERROR)
EndIf
Else
MessageRequester("", "Не удалось создать файл!", #MB_OK|#MB_ICONERROR)
EndIf SetCurrentDirectory(CurrentDir) ; Установка текущей папки программы.
If Error = #True ; Если произошла ошибка,
If FileSize(File) >= 0 ; и файл SFX архива был создан,
DeleteFile(File) ; удаляем файл.
EndIf SetGadgetText(#Text_CurrentFiles, "SFX архив не был создан")
SetGadgetState(#ProgressBar_FileProgress, 0)
SetGadgetState(#ProgressBar_AllProgress, 0)
EndIfEndProcedure
В первую очередь, очищается динамически связанный список, имеющий имя Files(). Он был объявлен в начале программы. Затем вызывается процедура Find_File(), основное назначение которой – занести в связанный список имена и пути всех файлов, подлежащих архивации.
Код:
; Занесение путей к упаковываемым файлам в связанный список.
Procedure Find_File(Path.s, Sub.s)If Right(Path.s,1)<>"\":Path + "\":EndIf ; Начало сканирования папки.
Directory = ExamineDirectory(#PB_Any, Path, "*.*")
If Directory
While NextDirectoryEntry(Directory) ; Следующий файл / папка.Type.l = DirectoryEntryType(Directory) ; Тип объекта (файл или папка).
Name.s = DirectoryEntryName(Directory) ; Имя объекта.
If Type = #PB_DirectoryEntry_File ; Найден файл.
AddElement( Files() ) ; Добавления элемента в список.
Files() = Sub + Name ; Запись в список имени файла.
ElseIf Type = #PB_DirectoryEntry_Directory ; Найдена папка.
If Name <> "." And Name <> ".." ; Не текущая и не родительская папка.
; Рекурсивный вызов процедуры.
Find_File(Path + Name, Sub + Name + "\")
EndIf
EndIf
Wend
FinishDirectory(Directory) ; Завершение сканирования папки.
EndIfEndProcedure
Процедура ищет файлы в выбранной папке и во всех подпапках. После того, как собранны данные об архивируемых файлах, работа процедуры завершается и управление передается процедуре Button_Archive(). Далее подсчитывается число элементов связанного списка для того, чтобы узнать сколько файлов предстоит архивировать. С помощью функции CreateFile() создается пустой файл – заготовка для самораспаковывающегося архива. При помощи функции WriteData(), в файл записывается модуль распаковки архива. Напомню, этот модулю был добавлен в программу оператором IncludeBinary. После чего, файл закрывается функцией CloseFile(). А вот дальше собственно и производится добавление файлов в самораспаковывающийся архив. Все начинается с установки текущего пароля архива, который должен находиться в поле «Пароль архива». Если это поле пустое, то пароль не устанавливается. При помощи функции PureZIP_Archive_Create(), открывается ранее созданный файл с уже записанным в него модулем распаковки. Флаг #APPEND_STATUS_CREATEAFTER означает, что архив будет создан в конце файла. После этого, функцией SetCurrentDirectory() изменяется текущая папка программы. Ею становится папка с файлами, подлежащими добавлению в архив. Это необходимо для того, чтобы в архиве были сохранены относительные пути к файлам, а не абсолютные. Далее, в цикле ForEach – Next, производится перечисление всех элементов списка Files() и добавление в архив, файлов, пути к которым хранятся в списке. Файлы добавляются в архив, функцией PureZIP_Archive_Compress(). Когда все файлы будут добавлены, функция PureZIP_Archive_Close() закрывает архив. Все, самораспаковывающийся архив готов! И его можно использовать по назначению.
Если щелкнуть правой кнопкой мышки по файлу самораспаковывающегося архива, то можно заметить что в появившемся контекстном меню, есть пункт архиватора WinRAR (если конечно он установлен в системе) и есть возможность выполнять стандартные действия над архивом, то есть, распаковать или открыть его, добавить или удалить файлы папки и т. д. В свойствах файла, так же присутствует вкладка «Архив». Все это указывает на то, что данный самораспаковывающийся архив, по своему формату, совместим с аналогичным, создаваемым программой WinRAR.
Статьи Главная
Сайт создан в системе uCoz
Как создать самораспаковывающийся архив или программу установки в Linux
Последнее обновление: 15 декабря 2020 г. , Дэн Нанни 7z
) для извлечения содержимого из файла архива, самораспаковывающийся (SFX) архив сам по себе является исполняемым файлом и может самораспаковываться при запуске. Самораспаковывающийся установщик делает то же самое, но также копирует извлеченное содержимое в соответствующие каталоги.
В этом руководстве я объясню , как создать самораспаковывающийся архив или программу установки в Linux .
Для этой цели вы можете использовать утилиту командной строки под названием makeself
. Инструмент makeself
представляет собой сценарий оболочки, который создает сжатый архив TAR из входных каталогов/файлов и добавляет небольшую заглушку сценария оболочки в начало архива, чтобы инициировать самораспаковку и направлять установку извлеченных файлов.
Установить
makeself
в Linux Чтобы установить makeself
, загрузите последнюю версию в формате архива и распакуйте загруженный архив следующим образом. После извлечения архива будет создан новый каталог с именем makeself-2.4.2. Скопируйте все сценарии оболочки в каталог /usr/bin
.
$ wget https://github.com/megastep/makeself/releases/download/release-2.4.2/makeself-2.4.2.run $ chmod 755 makeself-2.4.2.run $ ./makeself-2.4.2.run $ компакт-диск makeself-2.4.2 $ sudo cp *.sh /usr/bin
Основное использование makeself.sh
заключается в следующем.
makeself.sh [параметры] [каталог_в_пакете] [sfx_archive_filename] [метка] [startup_script] [необязательные_аргументы_скрипта]
Аргумент label
— это сообщение для печати, пока SFX-архив не сжат.
Аргумент startup_script
указывает сценарий/команду для запуска после успешного извлечения архива SFX. Это полезно при создании самораспаковывающегося установщика. Обычно сценарий запуска копирует/устанавливает извлеченное содержимое в соответствующие целевые каталоги. Сценарий запуска должен находиться внутри каталога для упаковки, чтобы сценарий был включен в архив SFX.
Вот некоторые из доступных опций для makeself.sh
:
-
--gzip
: Использовать gzip для сжатия (параметр по умолчанию). -
--bzip2
: Используйте bzip2 для сжатия. -
--nocomp
: Не сжимать. -
--notemp
: Не извлекать файлы во временный каталог, а в новый подкаталог, созданный в текущем каталоге. -
--follow
: Следуйте всем символическим ссылкам и архивируйте файлы, на которые есть символические ссылки.
Создать самораспаковывающийся архив
Чтобы создать самораспаковывающийся архив, содержащий все файлы в каталоге ./backup
, выполните следующие действия. Здесь процедура запуска не делает ничего, кроме вывода Извлечение выполнено
.
$ makeself.sh --notemp ./backup ./backup.run "SFX-архив для резервного копирования" echo "Извлечение выполнено"
Заголовок длиной 403 строки О сжатии 1540 КБ данных. .. Добавление файлов в архив с именем "./backup.run"... ./ ./jpeg/ ./jpeg/1.jpg . . CRC: 2238411397 MD5: 0b0fd3a2ba08ffcec821b9cbaa11b70d Самораспаковывающийся архив "./backup.run" успешно создан.
Чтобы извлечь файлы из архива, просто запустите архив:
$ ./backup.run
Создание резервной копии каталога Проверка целостности архива... Все хорошо. Распаковка архива SFX для резервного копирования............ Сделанный
Создать самораспаковывающийся установщик
Если вы хотите создать самораспаковывающийся установщик, вам необходимо подготовить отдельный сценарий запуска, который будет выполнять установку после извлечения файла. Здесь я предполагаю, что каталог программы для упаковки находится по адресу 9.0007 ./программа . Поэтому подготовьте сценарий запуска в каталоге ./program
.
$ vi ./program/install.sh
#!/бин/ш если [ -d $HOME/bin ] затем cp myprogram $HOME/bin/ фи
Затем сделайте сценарий запуска исполняемым.
$ chmod 755 ./program/install.sh
Создайте самораспаковывающуюся программу установки и упакуйте вместе с ней сценарий запуска следующим образом.
$ makeself.sh ./program ./program.run "Установщик SFX для программы" ./install.sh
7zip — Как сделать самораспаковывающийся и работающий установщик
Я создал пошаговые инструкции о том, как это сделать, так как я также был очень озадачен тем, как заставить это работать.
Как создать самораспаковывающийся архив для запуска файла setup.exe с ключом 7zip -sfx
Вот шаги.
Шаг 1. Настройте папку для установки
Чтобы упростить эту задачу, создайте папку c:\Install. Сюда мы скопируем все необходимые файлы.
Шаг 2 — 7. Заархивируйте установщики
- Перейдите в папку, в которой находится ваш .msi и файл setup.exe
- Выберите и .msi, и setup.exe
- Щелкните правой кнопкой мыши и выберите 7Zip —> «Добавить в архив»
- Назовите ваш архив «Installer. 7z» (или имя по вашему выбору)
- Нажмите «ОК»
- Теперь у вас должен быть «Installer.7z».
- Скопируйте этот файл .7z в каталог c:\Install
Шаг 3. Получите модуль расширения 7z-Extra sfx
Вам необходимо скачать 7zSD.sfx
- Загрузите один из пакетов LZMA отсюда
- Извлеките пакет и найдите
7zSD.sfx
в папкеbin
. - Скопируйте файл «7zSD.sfx» в папку c:\Install
Шаг 4. Настройте файл config.txt
Я бы рекомендовал использовать NotePad++ для редактирования этого текстового файла, так как вам нужно будет кодировать его в UTF-8. В следующих инструкциях используется notepad++.
- С помощью проводника Windows перейдите в папку c:\Install
- щелкните правой кнопкой мыши и выберите «Новый текстовый файл» и назовите его config.txt
- щелкните правой кнопкой мыши и выберите «Редактировать с помощью NotePad++»
- Нажмите «Меню кодировки» и выберите «Кодировать в UTF-8»
Введите что-то вроде этого:
;!@Install@!UTF-8! Название="ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ v1. 0.0.0" BeginPrompt="Вы хотите установить ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ v1.0.0.0?" ВыполнитьПрограмму="setup.exe" ;!@InstallEnd@!
Измените это, заменив [ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ v1.0.0.0] названием вашего продукта. Заметки о параметрах и опциях установочного файла находятся здесь.
CheckPoint
Теперь у вас должна быть папка «c:\Install» со следующими 3 файлами:
- Installer.7z
- 7zSD.sfx
- config.txt
Шаг 5. Создайте архив
Эти инструкции я нашел в Интернете, но нигде не объяснял ни один из 4 шагов, описанных выше.
- Откройте окно cmd, Window + R —> cmd —> нажмите Enter
В командном окне введите следующее
компакт-диск \ компакт-диск Установить копировать /b 7zSD.sfx + config.txt + Installer.7z MyInstaller.exe
Посмотрите в c:\Install и вы увидите, что у вас есть MyInstaller.exe
Вы закончили
Запустите установщик
Дважды щелкните MyInstaller.