вторник, 9 февраля 2010 г.

BASS без bass.dll


Сегодня у меня статья про упаковщиков исполняемых файлов, которые могут присоединить ещё и разные модули к exe-шнику. Кто работал с компонентами BASS, знают, что без bass.dll программа отказывается запускаться. Или те же проги, использующие SQLite. А следить за наличием dll-ки хлопотно и можно про неё забыть при выкладывании программы в Интернет.

Я уже давно пытался найти решение этой проблемы. При моих довольно скромных познаниях в программировании проблему могла решить только сторонняя программа. Нет, был, конечно, другие варианты, например вложить dll как бинарные данные в программу и при запуске сохранять их в файл dll, но программа без dll (конкретно - BASS) даже не запускается. Поэтому требовалось что-то другое.

Сначала я попробовал программу MoleBox. Она присоединяет dll к exe, но, видимо, что-то изменяет в dll, так что программа с BASS отказывается запускаться. В него, насколько я понял на официальном сайте, встроена защита от изменений.

Потом нашёл программу PEBundle. У неё, кстати, интерфейс на русском, да и настроек поменьше. Большинство из них хорошо понятны даже новичкам. Версия программы, правда, старовата - 2.44, но замечательно работать ей это не мешает. Проблем с запуском программ с BASS больше нет.

Вот эта программа.

Просто установите её и выберите русский язык. Работать с программой очень просто. Сначала выберите EXE, затем добавьте модуль (DLL). Можно добавить несколько модулей, если ваша программа в них нуждается.

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

Если выбран вариант «на диск», то можно указать и папку для извлечения. Рекомендуется, конечно, {Temporary folder}, так как это папка для временных файлов. Также можно выбрать удаление модуля после закрытия программы. Это рекомендуется делать, чтобы не засорять и так не всегда чистую папку временных файлов.


Примечательно и то, что размер программы увеличивается только на размер модуля, но распаковка UPX (это упаковщик, через который HiAsm упаковывает программы для уменьшения веса) не происходит. В довершение стоит скачать, что программа просит регистрацию, но и без неё работает отлично. Так что пользуйтесь на здоровье!






Если ваш продукт нуждается в сертификации, то обратитесь в www.rospromtest.ru. Благодаря сертификации повышается доверие клиентов к вашему товару, а это успешно повлияет на ваш бизнес.

Для красоты вашего дома сделайте себе красивый козырёк. А козырьки стеклянные изготавливает фирма "Багплюс" и предлагает различные их варианты.

15 комментариев:

  1. Нужная весчь, СПасиба.

    ОтветитьУдалить
  2. Вообщето это все делается средствами самого HiAsm

    для этого существует компонент TempFileStream

    ОтветитьУдалить
  3. Если в схеме есть компоненты BASS, то программа без bass.dll вообще работать не будет. Так что TempFileStream тут не поможет, ведь он сработает только после запуска программы, которого не произойдёт.
    Единственный вариант - делать программу, которая будет содержать и exe-файл с компонентами BASS, и DLL, а потом распаковывать их обе и запускать тот exe.

    ОтветитьУдалить
  4. Делается это так:
    1. Переписываем Bass.pas таким образом,
    чтобы экспортируемые функции были не статическими а динамическими. (Чтобы программа нормально стартовала без dll)

    2. Из ресурса создаете или обычный файл bass.dll или виртуальный (с помощью BoxedApp)

    3. Далее LoadLibrary и GetProcAdrr

    все замечательно работает, программа сильно в размерах не увеличивается :)

    ОтветитьУдалить
  5. Что же, можно и такой способ.

    ОтветитьУдалить
  6. А вы бы могли показать урок по упаковки в единый файл ехе, папок рисунки, текстовые документы и.т.д,чтобы они как в портфеле были.При клике они изнутри запускаются в месте с программой.

    ОтветитьУдалить
  7. Это можно сделать без проблем и стандартными средствами. Вот.

    ОтветитьУдалить
  8. Извините вы меня не поняли немного, я знаю что можно сделать стандартными средствами, я хоте сделать такую программу, чтобы упаковать в один exe файл, ну чтобы пользователь мог сам уже выбрать папку которая ему нужна, и упокавать в единый файл exe. Чтоб вагон папок не таскать за собой, и при запуске все работало изнутри так понятно. Заранее спасибо

    ОтветитьУдалить
  9. Ну, если я правильно понял, то вот решение. bh278 и bh279.

    Вот порядок работы:
    - Запустите HiAsm 4.04 build 184 (предыдущие версии HiAsm не подойдут).
    - Скомпилируйте (Запуск -> Компилировать) обе схемы, но не запускайте!
    - Запустите bh278.exe (bh279.exe обязательно должна находиться рядом). Выберите файлы и нажмите "записать".
    - Запустите bh279.exe и дважды щёлкните на нужном файле.

    Если сначала запустить bh279.exe, в ней ничего не будет.

    Это только пример, как сделать вашу идею. В нём много не реализовано: удаление данных из bh279.exe, замена и пр. Вы можете это доделать сами.

    ОтветитьУдалить
  10. Здравствуйте!!! Как вы описали порядковый ход движений почему-то не работает, скопировал ваши 2 схемы bh278 и bh279, как вы описали что,сначала нужно их откомпилировать потом запустить bh278 файл, выбрать файл и нажать запись. У меня пишет что не найден файл bh279, хотя они лежат в одной папке, почему так не скажете, версия Hiasm, совпадает с вашими данными, может и за того что у меня не стоит компилятор делфи?

    ОтветитьУдалить
  11. Извините все разобрался, дело в том что я их своими именами назвал, все работает, спасибо буду дорабатывать идею, если будут вопросы можно ли будет вам их задать по поводу этого проекта?

    ОтветитьУдалить
  12. Хотел бы вопросик задать, так вот вы мне, показали, пример по создание единого файла, в bin файл. А реально сразу сделать отдельно данные которые я укажу, и создать в ехе фай . Это мне так же нужно добавить компонент
    File Strime? чтобы я так понимаю он преобразовывал в поток файлов в формат exe, или не так?. Мне просто очень хочется понять всю эту логику цепочки, и сама программа была бы полезна для пользователе,кто хочет зашить свои данные от лишних глаз, вы не подумайте я эту программу создаю я без всякого зашивание вирусов. Такими делами не занимаюсь.Если не трудно подскажите.

    ОтветитьУдалить
  13. Компонент FileStream достаётся из файла все его байты, т.е. файловый поток. Можно сделать и так, что файл bin создаваться не будет, но так сложнее будет доставать данные. Чтобы лучше это понять, почитайте:
    - http://hi-asm.blogspot.com/2009/11/blog-post_16.html
    - http://hi-asm.blogspot.com/2009/11/blog-post_19.html
    - http://hi-asm.blogspot.com/2009/11/blog-post_2549.html

    ОтветитьУдалить
  14. Caesars Palace Casino and Hotel Map & Floor Plans - Mapyro
    Find your 진주 출장샵 way around the 충주 출장안마 casino, find where everything is located 거제 출장샵 with 광주 출장안마 your family, friends and fellow players. Caesars Palace 정읍 출장안마 Casino & Hotel Map.

    ОтветитьУдалить