Вопрос

В какой-то момент у меня была небольшая симпатичная утилита сжатия, которая уменьшала размер загрузки моих скомпилированных Delphi EXE-файлов, но теперь я не могу ее найти.Есть рекомендации?

Кроме того, есть ли какие-либо недостатки в использовании подобных утилит?(В основном я использую их для сокращения времени загрузки для сельских пользователей/пользователей коммутируемого доступа).


Связанный вопрос: Есть ли какие-либо недостатки в использовании UPX для сжатия исполняемого файла Windows?

Это было полезно?

Решение

Несколько лет назад я решил сжать свой исполняемый файл, чтобы уменьшить размер загрузки.

В итоге я сделал и рекомендую вам использовать программу установки, например Настройка Инно вместо.Он не только создает один EXE-файл, который установит/удалит вашу программу, но также сжимает этот EXE практически так же, как отдельный компрессор сжимает только ваш исполняемый файл.

Когда программа устанавливается, она распаковывается, поэтому никогда не выглядит как вирус и не увеличивает время загрузки.

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

п.с.Установка Inno бесплатна.

Другие советы

Рекомендуется не:

  • Компрессоры EXE могут сделать ваше приложение похожим на вирус (самомодифицирующийся).
  • gzip/zip столь же эффективны при сжатии и не требуют никаких изменений в вашем приложении.
  • Компрессоры EXE увеличивают время загрузки вашего приложения (если только вы не говорите просто о программе установки, а это совсем другое дело).

Этот безумно выглядящий сайт поднимает аргумент, который я слышал в далеком прошлом (правда это или нет, я не уверен, современные упаковщики, вероятно, сегодня имеют другую стратегию) В этой статье упоминается Win32! :)

http://topic.csdn.net/t/20000408/08/6785.html

Современные многозадачные OSES, такие как Windows 95/98 и NT, используют так называемую систему «виртуальной памяти».Когда начинаются программы, весь их код не загружается в память сразу после запуска, как это было в случае с программами DOS.Вместо этого только части активно выполняемого кода хранятся в памяти.Например, скажем, в вашей программе есть вариант печати в его меню, а код за ней, который обрабатывает печать.Этот код будет загружен в память только после того, как функция печати сначала выбран пользователем.И если после того, как код загружается в память, функция печати не используется какое -то время, пока система «отбросит» код, освобождая займую память, которую она заняла, если другому приложению отчаянно нуждается в памяти.Это часть процесса, называемого «пейджинг» и полностью прозрачна для программы.

Другой способ подключения под Win32 Servessment Memory заключается в том, что она заставляет несколько экземпляров программы (или DLL) обмениваться одной и той же памятью для кода.Другими словами, при нормальных обстоятельствах нет реальной разницы в количестве физической памяти, выделенной для кода между началом 100 экземпляров программы и запуска одним экземпляром.

Если все программы Win32 вели себя как программы DOS, загружая все в память и сохранив его там до завершения программы, а также не разделять память между несколькими экземплярами, вы, вероятно, можете представить, как быстро может исходить физическая память с ограниченной суммой, вызывая Обмен диска для начала.

Тем не менее, это именно то, что текущие компрессоры Exe Win32 делают с вашим EXE/DLL!Они полностью идут против системы пейджинга ОС, декомпрессия всего кода в память и сохраняя ее там до завершения.И поскольку код не хранится в «необработанном» формате в файле EXE (т.е.Точно так же, как он хранится в памяти), ОС не может делиться кодом между несколькими экземплярами.

Я не знаю ни одного, предназначенного специально для Delphi, но УПХ очень популярен для подобных вещей.Единственным недостатком является то, что исполняемый файл необходимо распаковывать при запуске, а это может занять некоторое время.Однако это кажется очень быстрым для исполняемых файлов разумного размера.

Тот, о котором вы, вероятно, думаете, АСПак - это компрессор EXE, написанный на Delphi, но он сжимает любой EXE.Хотя на Delphi EXE он может работать очень хорошо.Я согласен с другими ответами, что вам не следует использовать компрессор EXE только для экономии времени загрузки.Могут быть определенные ситуации, когда сжатие EXE является хорошей идеей, но обычно это не так.

Вместо этого используйте хороший сборщик установки, особенно если вы можете найти тот, который использует сжатие 7zip.Я знаю УстановитьAware внутри использует 7zip для максимального сжатия.В зависимости от того, какие версии Delphi у вас есть, у вас также может быть лицензия InstallAware.

По крайней мере, вы можете создать самораспаковывающийся архив с базовым поведением установки с помощью 7zip бесплатно.Это отдельная загрузка SFX для установщиков.

Использовать УПХ с опцией lzma для максимального сжатия.

upx --lzma yourfile.exe

Основное неудобство сжатого EXE- или DLL-файла заключается в том, что ОС не может использовать код совместно с несколькими экземплярами.
Таким образом, вы тратите впустую память, вам приходится распаковывать каждый раз при запуске экземпляра, проявлять поведение, подобное вирусу, даже не имея преимущества при загрузке по сравнению со сжатой установкой.
Единственный положительный случай - при запуске напрямую с сетевого диска.

Я считаю, что терминальные серверы (например, Citrix) будут использовать ту же память для двоичного файла вашего приложения, если он несжат.Это означает, что сжатый exe-файл может учуять небольшую катастрофу в среде Citrix.

УПХ должно работать, хотя это не специфично для Delphi.

Я использую PEtite: http://un4seen.com/petite/

Я бы тоже проголосовал за upx.Помимо упомянутых недостатков, он также защищает от базового обратного проектирования и этих отстойных инструментов «хакера ресурсов».Их, кстати, достаточно, и большинство из них не могут открыть сжатый исполняемый файл.

Некоторое время назад я задал здесь, на SO, вопрос о недостатках использования UPX в исполняемых файлах Delphi и получил несколько отличных ответов.

Есть ли какие-либо недостатки в использовании UPX для сжатия исполняемого файла Windows?

Вы можете использовать PEКомпактный поскольку люди не могут легко его расшифровать, и, как показал тест (показано на главной странице, просто прокрутите немного вниз), это лучше, чем ASPack или UPX, я использовал его в своих предыдущих проектах Delphi

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top