Подтвердить что ты не робот

Упаковка 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, настройки реестра,...).

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

Там должно быть несколько недорогих (т.е. довольно дешевых) инструментов которые свяжут не связанные с сетью 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

Ответ 9

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

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