Delphi EXE компрессор?

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

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


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

12 ответов

Решение

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

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

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

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

ps Inno Setup бесплатная.

Рекомендуется, чтобы вы не:

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

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

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

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

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

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

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

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

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

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

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

Используйте UPX с опцией lzma для максимального сжатия.

upx --lzma yourfile.exe

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

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

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

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

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

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

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

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

Другие вопросы по тегам