Упаковка exe + dll в один исполняемый файл (не .NET)

Возможный дубликат:
Как можно слить dll С++ в приложение EXE С#?

Кто-нибудь знает о программе, которая может упаковать несколько DLL и .EXE в один исполняемый файл. Я не говорю о случае .NET здесь, я говорю об общих DLL-библиотеках, некоторые из которых я генерирую на С++, некоторые из которых являются внешними DLL. Я не контролирую.

Моим конкретным случаем является программа python, упакованная с py2exe, где я хотел бы "скрыть" другую DLL, упаковывая их. Вопрос достаточно общий, хотя.

То, что смотрело:

  • ILMerge: для .NET.
  • NETZ: для .NET.
  • UPX: делает компрессию DLL, но не множественную упаковку DLL + EXE
  • FileJoiner:
Почти это получилось. Он может упаковывать исполняемый файл + что-либо в один exe, но при его открытии он запускает открыватель по умолчанию для каждого упакованного файла. Таким образом, если пользовательский пользователь dlldepend установлен, он запустит его (это означает, что стандартный DLL-открыватель).

Может быть, это невозможно?


Резюме ответов:

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

Итак, я не хочу.

Если только...

Мы что-то меняем в ОС. Спасибо, что Конрад указал мне на ThinInstall, которые виртуализируют приложение и механизм загрузки ОС. С ThinInstall можно упаковать все в один exe (DLL, настройки реестра,...).

+27
03 дек. '08 в 12:34
источник поделиться
9 ответов

Взгляните на Thinstall ThinApp

+4
03 дек. '08 в 14:30
источник

Посмотрите BoxedApp. Удачи!

+5
13 апр. '10 в 7:10
источник

Если исполняемый файл статически ссылается на DLL, то есть нет вызовов на LoadLibrary, то я не думаю, что есть какие-либо механизмы для упаковки DLL в исполняемый файл, так как загрузка DLL выполняется загрузчиком приложений ОС до вызова "основной" функции. Единственный способ обойти это, насколько мне известно, - поместить exe и dll в другой exe. Эта оболочка exe распаковывает реальные exe и dll во временную папку и запускает exe, удаляя файлы, когда exe завершает работу.

Если вы вызываете LoadLibrary/Ex для загрузки DLL, извлеките dll из ресурсов exe в файл до вызова LoadLibrary/Ex.

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

+4
03 дек. '08 в 14:11
источник

Попробуйте Powerpacker. Evalaze - еще одно бесплатное решение для виртуализации. Enigma Virtual Box FREEWARE Edition

+2
03 июн. '11 в 0:03
источник

Вы можете добавить библиотеки DLL в виде двоичных ресурсов в EXE. При запуске ваш EXE может затем извлечь ресурсы во временную папку и LoadLibrary() результирующие DLL.

+1
03 дек. '08 в 13:55
источник

Вы можете использовать valgrid, thinstall или boxedapp.... Я предпочитаю последний.

+1
23 нояб. '11 в 19:15
источник

MoleBox Pro делает именно то, что вы хотите, но это shareware, и, если вы не купите полную версию, упакованные исполняемые файлы покажут диалоговое окно при запуске, сказав что-то вроде "Этот файл был упакован пробной версией MoleBox, пожалуйста, не распространяйте его"

Вы можете уменьшить его здесь: ссылка

К сожалению, мне не удалось найти полностью удовлетворяющее и бесплатное решение

0
07 янв. '09 в 20:31
источник

Вы посмотрели мой список дешевых сервисов?

Там должно быть несколько недорогих (т.е. довольно дешевых) инструментов которые свяжут не связанные с сетью DLL (-ы) приложения, например:

1.) Molebox Pro (eu 100) 2.) BitArt Fusion ($ 160) 3.) VB Wrap ($ 100) 4.) PE Bundle ($ 30)

Кроме того, на сайте www.oreans.com вы можете найти программно-ориентированный программный пакет для eu 320, который, как они утверждают, могут связывать файлы Win32 или .Net вместе; однако, когда я попросил их указать сценарий, где я бы использовал их "XBundler For Win32/.NET ", чтобы упаковать".Net "EXE, а затем попытается запустить его на Windos 98 (без рамки), они сказали, что это не сработает.: - (

EXE Admirer

0
02 мар. '09 в 12:30
источник

Мне сказали, что можно запросить ссылку на общий объект на другой общий объект, таким образом объединив их в один в Linux

Но это не сработает для родных DLL Windows, одна вещь возникает для меня, мы можем просто использовать компоновщик, чтобы связать все objs вместе, независимо от того, к какому проекту они принадлежат первоначально. Конечно, они должны иметь похожие параметры ссылок.

0
05 мар. '09 в 6:44
источник

Посмотрите другие вопросы по метке или Задайте вопрос