Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2020, 09:22
Alexandr_57 Alexandr_57 вне форума
Прохожий
 
Регистрация: 26.02.2016
Сообщения: 30
Версия Delphi: Delphi XE10
Репутация: 10
Вопрос Свой инсталятор

Здравствуйте.
Помогите разобраться с этим вопросом.
А именно с созданием своего инсталятора. Для начало меня интересует библиотека или способ сжатия данных в 1 файл. Как4 вариант библиотека SevenZipVCL однако тот факт что на их оф сайте библиотека старая и не содержит метода LZMA2 меня совершенно не устраивает. Можете помочь найти библиотеку. Или расказать о способе упаковать файлы в 1 файл.
Файлы большого размера. Примерно пол гига полный объем всех файлов.
Ответить с цитированием
  #2  
Старый 23.06.2020, 14:47
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

А создание sfx-архива не рассматривается? Или воспользоваться мощным специализированным инструментом, например Advanced Installer, не? А по вопросу, я думаю, что все требуемые файлы нужно поместить в ресурсы твоего проекта-инсталятора, а при запуске инсталятора ресурсы нужно извлечь в требуемый каталог.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.

Последний раз редактировалось Kailon, 23.06.2020 в 14:52.
Ответить с цитированием
  #3  
Старый 23.06.2020, 15:06
Alexandr_57 Alexandr_57 вне форума
Прохожий
 
Регистрация: 26.02.2016
Сообщения: 30
Версия Delphi: Delphi XE10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kailon
А создание sfx-архива не рассматривается? Или воспользоваться мощным специализированным инструментом, например Advanced Installer, не? А по вопросу, я думаю, что все требуемые файлы нужно поместить в ресурсы твоего проекта-инсталятора, а при запуске инсталятора ресурсы нужно извлечь в требуемый каталог.
Нет. Сторонние варианты не расматриваю. Не годятся не 1. Ресурсы тоже не катят ибо процесс сжатия равен нулю тогда.
Ответить с цитированием
  #4  
Старый 24.06.2020, 08:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

И чем готовые решения не годятся?
Я, например, пользуюсь InnoSetup. Там есть все, в том числе и можно свой код (на паскале) написать.
Ответить с цитированием
  #5  
Старый 24.06.2020, 13:25
Alexandr_57 Alexandr_57 вне форума
Прохожий
 
Регистрация: 26.02.2016
Сообщения: 30
Версия Delphi: Delphi XE10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
И чем готовые решения не годятся?
Я, например, пользуюсь InnoSetup. Там есть все, в том числе и можно свой код (на паскале) написать.
Тем что свой интерфейс и остальной функционал помио инсталятора на inno пилить гораздо сложнее.
Ответить с цитированием
  #6  
Старый 24.06.2020, 20:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, пиши свой.
Файлы можно жать чем угодно, хоть встроенным компрессором (ZLib).
Т.е. у тебя есть:
1. Некоторые файлы, которые надо установить
2. Проект инсталятора (не самого приложеня, а отдельный проект для инсталляции)

Делаем раз - жмем файлы любым методом. Один файл - один архив.
Делаем два - создаем rc файл со списком сжатых файлов.
Делаем три - запускаем компилятор ресурсов и компилируем файл res из rc.
Делаем четыре - в проект инсталятора подключаем полученный файл res.
Делаем пять - в проекте инсталятора пишем код, который достает нужный ресурс по идентификатору, разжимает его и пишет в нужное место.
Profit.

PS. Запуск компилятора ресурсов можно настроить на автоматический запуск перед компиляцией проекта инсталятора, но если файлы большие, то лучше этого не делать, а самому подготовить его заранее.
Ответить с цитированием
  #7  
Старый 25.06.2020, 15:15
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
Сообщение от Alexandr_57
Ресурсы тоже не катят ибо процесс сжатия равен нулю тогда.
А вот грамотный человек говорит, что ресурсы надо, просто предварительно сжав их
Цитата:
Сообщение от lmikle
Делаем три - запускаем компилятор ресурсов и компилируем файл res из rc.
А еще грамотный человек посоветовал программу с открытым исходным кодом написанную на Delphi! Я думаю надо скачать исходники и посмотреть, что и как там делается. Да, разбираться в чужом коде то ещё удовольствие, но если Вы хотите разработать своё, то придётся искать, разбираться, творить...
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #8  
Старый 26.06.2020, 15:05
Alexandr_57 Alexandr_57 вне форума
Прохожий
 
Регистрация: 26.02.2016
Сообщения: 30
Версия Delphi: Delphi XE10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, пиши свой.
Файлы можно жать чем угодно, хоть встроенным компрессором (ZLib).
Т.е. у тебя есть:
1. Некоторые файлы, которые надо установить
2. Проект инсталятора (не самого приложеня, а отдельный проект для инсталляции)

Делаем раз - жмем файлы любым методом. Один файл - один архив.
Делаем два - создаем rc файл со списком сжатых файлов.
Делаем три - запускаем компилятор ресурсов и компилируем файл res из rc.
Делаем четыре - в проект инсталятора подключаем полученный файл res.
Делаем пять - в проекте инсталятора пишем код, который достает нужный ресурс по идентификатору, разжимает его и пишет в нужное место.
Profit.

PS. Запуск компилятора ресурсов можно настроить на автоматический запуск перед компиляцией проекта инсталятора, но если файлы большие, то лучше этого не делать, а самому подготовить его заранее.
Цель не просто сжать а максимально сжать. Файл размером в 599 МБ в 7z при максимальном сжатии имеет всего 349 МБ. Так что примерно такой способ. Единственный вариант это работать с dll 7z но знатьбы как. Официальные библиотеки пас меня мало интересуют так как банально устарели и не имею LZMA2 сжатия.
Параметры сжатия которые использовались для сжатия в 7z
Метод: LZMA2
Уровень сжатия: Ультра
Размер словаря: 128 МБ
Размер слова: 64
Размер блока: 8GB
Число потоков: 4 - 8
Вот примерно такой уровень сжатия меня и интересует. Но исходники 7z на delphi не дают такого большого уровня. Там максимум LZMA с размером словоря 32МБ
И да меня не волнует сколько часов это будет запаковываться. Да хоть часов 10. Главное чтоб распаковка и уровень сжатия была высокая.
И да. Я и так заранее буду готовить данные так как помимо самой запаковки это еще и шифровка. Пакет с данными конечно должен быть отдельным файлом. Его легче будет загрузить из сетки чем грузить вместе с основной программой. Точнее программа будет загружать из сетки.

Последний раз редактировалось Alexandr_57, 26.06.2020 в 15:14.
Ответить с цитированием
  #9  
Старый 26.06.2020, 18:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Насколько я знаю, дельфевый 7zip компонент - это просто обертка над соотв. dll от самого 7zip. А не судьба просто попробовать подложить новую библиотеку и попробовать?

Кстати, есть еще компрессор bzip, Тоже дает неплохой коэф. сжатия.
Ответить с цитированием
  #10  
Старый 27.06.2020, 14:52
Alexandr_57 Alexandr_57 вне форума
Прохожий
 
Регистрация: 26.02.2016
Сообщения: 30
Версия Delphi: Delphi XE10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Насколько я знаю, дельфевый 7zip компонент - это просто обертка над соотв. dll от самого 7zip. А не судьба просто попробовать подложить новую библиотеку и попробовать?

Кстати, есть еще компрессор bzip, Тоже дает неплохой коэф. сжатия.

Яже сказал та что на сайте это старая обертка там нет данных по сжатию LZMA2 и других данных. Она устарела. Понятное дело что это обертка. Но это обертка по сути над компонентам 7ZA.DLL
Когда как в самом архиве используется просто 7z.dll
Плюс как уже сказал в обертке нет никаких инструкций по использованию LZMA2, словоря большего объема и прочего.

Забыл добавить размер хоть и большой но это не 1 файл и не 2 и не 10 а несколько тысяч

Вот и та самая обертка:
Вложения
Тип файла: pas SevenZipVCL.pas (119.7 Кбайт, 2 просмотров)

Последний раз редактировалось Alexandr_57, 27.06.2020 в 15:25.
Ответить с цитированием
  #11  
Старый 04.12.2020, 16:32
basilcat basilcat вне форума
Прохожий
 
Регистрация: 27.04.2017
Сообщения: 16
Версия Delphi: Delphi 7
Репутация: 10
Смех

Вариант такой. Пишем сами упаковщик на основе скажем по алгоритма Зеемана или Хаффмана или разработаем свой и вносим вклад в науку и программирование.
Например такая идея. Любое число может быть просуммированы по цифрам от 0 до 9. При этом в конечном итоге получим цифру из этого же диапазона. А дальше полет мысли неограничен.
Ответить с цитированием
  #12  
Старый 11.12.2020, 15:44
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Цитата:
Сообщение от Alexandr_57
Яже сказал та что на сайте это старая обертка там нет данных по сжатию LZMA2 и других данных. Она устарела. Понятное дело что это обертка. Но это обертка по сути над компонентам 7ZA.DLL
Когда как в самом архиве используется просто 7z.dll
Плюс как уже сказал в обертке нет никаких инструкций по использованию LZMA2, словоря большего объема и прочего.

Забыл добавить размер хоть и большой но это не 1 файл и не 2 и не 10 а несколько тысяч

Вот и та самая обертка:

Вот вам XZ, на основе LZMA SDK, пакует используя по умолчанию алгоритм LZMA2, но сперва для объединения всех файлов в один используйте TAR (получится типа TAR.XZ, только не используйте очень длинные имена файлов):
https://github.com/delphiunderground/xz-examples-delphi

Либо, перекладывайте всю работу на командную строку того же 7-Zip (пример макс сжатия):
"C:\Program Files\7-Zip\7z.exe" a -t7z -m0=lzma2:d1024m -mx=9 -aoa -mfb=64 -md=32m -ms=on -sdel filename archive.7z

Последний раз редактировалось Vayrus, 11.12.2020 в 15:47.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter