2008-12-03 28 views
28

Duplicar posibles:
How can a C++ windows dll be merged into a C# application exe?Embalaje un exe + DLL en un ejecutable (no .NET)

Hay alguien consciente de un programa que puede empaquetar varios DLL y un .EXE en un ejecutable. No estoy hablando del caso de .NET aquí, estoy hablando de DLL generales, algunos de los cuales genero en C++, algunos de ellos son DLL externos sobre los que no tengo control.

Mi caso específico es un programa python empaquetado con py2exe, donde me gustaría "ocultar" el otro archivo DLL empaquetándolos. La pregunta es lo suficientemente general sin embargo.

Las cosas que tenían un vistazo a:

  • ILMerge: específico para .NET
  • NETZ: específico para .NET
  • UPX: hace compresión DLL pero no múltiples DLL + EXE embalaje
  • FileJoiner:
Casi lo consiguió. Puede empacar ejecutable + cualquier cosa en un exe pero cuando se abre, se iniciará el abridor predeterminado para cada archivo que se empaquetó. Por lo tanto, si el usuario usuario dlldepende instalado, lo ejecutará (porque ese es el abridor predeterminado de dll).

Quizás eso no sea posible?


Resumen de las respuestas:

apertura DLL es administrado por el sistema operativo, por lo que el embalaje DLL en ejecutable significa que en algún momento, tienen que ser extraído a un lugar en el que el sistema operativo puede encontrarlos. Sin bala mágica.

Por lo tanto, lo que quiero no es posible.

A menos que ...

Cambiamos algo en el sistema operativo. Gracias a Conrad por indicarme ThinInstall, que virtualiza la aplicación y el mecanismo de carga del sistema operativo. Con ThinInstall, es posible empacar todo en un exe (DLL, configuración de registro, ...).

+0

También puede usar boxedapppacker - similar a thinstall. – MastAvalons

+0

o use BoxedApp SDK - biblioteca del desarrollador para archivos de virtualización y registro – MastAvalons

+0

Recientemente, PELock se actualizó con capacidad de enlace DLL https://www.pelock.com/img/en/products/pelock/virtual-dll-libraries/pelock-virtual- dll-binder.png –

Respuesta

5

Tenga una mirada en Thinstall ThinApp

+2

parece que el enlace no es válido más – Kuncevic

+0

@bigb: fue adquirido por VMWare: http://en.wikipedia.org/wiki/VMware_ThinApp –

+1

Funciona ... pero para cualquiera que esté considerando esta opción, ThinApp empaqueta su aplicación junto con algo llamado TSASurrogate.exe, y en la versión 5.1 es ** 14 Megabytes **. En el caso que estaba viendo, eso más que duplicó el tamaño del programa. – HostileFork

1

Puede agregar las DLL como recursos binarios en su EXE. Al inicio, su EXE puede extraer los recursos en una carpeta temporal y LoadLibrary() los archivos DLL resultantes.

4

Si el archivo ejecutable está enlazado estáticamente a la DLL, es decir, no hay llamadas a LoadLibrary, entonces no creo que exista ningún mecanismo para empaquetar la DLL en el archivo ejecutable ya que la carga del archivo DLL a la función "principal" que se llama. La única forma de evitar esto, hasta donde yo sé, es poner el exe y los dlls en otro exe. Este administrador de contenedor descomprime los archivos exe y dlls reales en una carpeta temporal e inicia el exe, eliminando los archivos cuando el ejecutable se cierra.

Si llama al LoadLibrary/Ex para cargar el dll, extraiga el dll de los recursos exe en un archivo antes de la llamada al LoadLibrary/Ex.

El problema real es que la función LoadLibrary realiza muchas reparaciones de direcciones cuando la biblioteca está cargada y solo funciona cuando se carga desde un archivo.

+0

Supongo que la pregunta es '¿es posible escribir un enlazador que tome el código de una DLL en la forma en que se puede obtener el código de un archivo LIB y agregarlo al EXE que se está vinculando'? – Skizz

+0

El contenedor .EXE es el enfoque que uso.Obviamente, hoy en día necesitas pensar un poco sobre dónde desempacas todo, no asumas que puedes descomprimir en \ archivos de programa \ ... sin necesidad de ejecutarlo como administrador –

0

MoleBox Pro hace exactamente lo que quiere, pero es una version de prueba, y, a menos que comprar una versión completa, ejecutables empaquetados mostrará un cuadro de diálogo en el inicio, diciendo algo como "Este archivo fue comprimido por una versión de prueba de MoleBox, por favor no distribuirlo"

Usted puede downliad aquí: link

por desgracia, no he podido encontrar una solución plenamente satisfactoria y libre

0

¿Has mirado mi lista de utilidades baratas?

supone que hay varios (es decir, más baratas) herramientas de bajo costo que uniría DLL (s) de aplicación no neta en conjunto, tales como:

1.) MoleBox Pro (UE 100) 2.) Fusión de Bitart ($ 160) 3.) VB Wrap ($ 100) 4.) PE Bundle ($ 30)

Además, en "www.oreans.com" es posible encontrar un paquete de programa orientadas a la protección de la UE 320, que, , como dicen, puede vincular Win32 o archivos ".Net" juntos; sin embargo, cuando les pedí un escenario específico , donde usaría su "XBundler para Win32/.NET" para empaquetar un EXE ".Net", y luego intentaría ejecutarlo en Windos 98 (sin el marco), dijeron que no funcionaría. :-(

EXE Admirador

0

me dijeron que es posible solicitar un enlace de objetos compartidos a otro objeto compartido tanto combinarlos en un solo en Linux

pero no va a funcionar para DLL nativas de Windows , una cosa me ocurre es que podemos usar el enlazador para vincular todos los objs, independientemente del proyecto al que pertenecen originalmente. Por supuesto, necesitan tener opciones de enlace similares.

5

Eche un vistazo a BoxedApp. ¡Buena suerte!

+1

A diferencia de ThinApp y Evalaze, BoxedApp no ​​agrega 14 MB al tamaño de la aplicación, solo un par de MB. Lo que es bueno. Sin embargo, parecía ser algo frágil. No podría empaquetar archivos EXE comprimidos UPX o DLL, y si prueba UPXing el BoxedApp resultante que tampoco funcionaría. Incluso sin comprimir, una aplicación basada en Qt podría colgarse en las máquinas de varias personas a las que se la envié * (aunque la aplicación Qt sin comprimir en Win8 y XP a nivel local) *. Soy cauteloso con las soluciones de código cerrado en general w.r.t. no ser capaz de tomar soluciones en las propias manos ... pero esta también es cara. : -/ – HostileFork

1

Puede usar valgrid, thinstall o boxedapp .... Prefiero este último.

Cuestiones relacionadas