elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  (SOLUCIONADO) Adjuntar DLL dentro del Executable?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: (SOLUCIONADO) Adjuntar DLL dentro del Executable?  (Leído 11,264 veces)
Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
(SOLUCIONADO) Adjuntar DLL dentro del Executable?
« en: 23 Noviembre 2012, 15:43 pm »

Estoy siguiendo estos pasos:


Citar
   Add the desired assembly (stdlib.dll) to the project's resources.
    Go to the Resources tab of the Project Properties and choose Add Resource > Add Existing File...
    Switch to the Application tab and click on the View Application Events button.

    Add this code to the ApplicationEvents.vb code that opens.

Código
  1.    Private Sub AppStart(ByVal sender As Object,
  2.      ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
  3.        AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ResolveAssemblies
  4.    End Sub
  5.  
  6.    Private Function ResolveAssemblies(sender As Object, e As System.ResolveEventArgs) As Reflection.Assembly
  7.        Dim desiredAssembly = New Reflection.AssemblyName(e.Name)
  8.  
  9.        If desiredAssembly.Name = "the name of your assembly" Then
  10.            Return Reflection.Assembly.Load(My.Resources.STDLIB) 'replace with your assembly's resource name
  11.        Else
  12.            Return Nothing
  13.        End If
  14.    End Function
  15.  
   Now compile your project and you'll have the dependent assembly incorporated into the output as a single file.

El problema es que lo he hecho todo, pero me da error el "applicationEvents.vb"

Código:
Error	1	Statement is not valid in a namespace.	C:\Users\Administrador\Desktop\WindowsApplication19 - copia - copia\ApplicationEvents.vb	1	1	WindowsApplication19


Mi ApplicationEvents estaba vacío al abrirlo, no se si ese puede ser el error, quizás me falta algo, solo tengo esto :

Código
  1. Private Sub AppStart(ByVal sender As Object,
  2.  ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
  3.    AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ResolveAssemblies
  4. End Sub
  5.  
  6. Private Function ResolveAssemblies(sender As Object, e As System.ResolveEventArgs) As Reflection.Assembly
  7.    Dim desiredAssembly = New Reflection.AssemblyName(e.Name)
  8.  
  9.    If desiredAssembly.Name = "Ookii.Dialogs.dll" Then
  10.        Return Reflection.Assembly.Load(My.Resources.Ookii.Dialogs) 'replace with your assembly's resource name
  11.    Else
  12.        Return Nothing
  13.    End If
  14. End Function


« Última modificación: 23 Noviembre 2012, 18:30 pm por EleKtro H@cker » En línea



seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Adjuntar DLL dentro del Executable?
« Respuesta #1 en: 23 Noviembre 2012, 15:49 pm »

esta pregunta la hice hace unos años:

[Solucionado] Cargar DLL a memoria

ahi tenes como hacerlo.

por ejemplo yo uso un control de grilla (que es una dll), antes tenia que llevar la dll con el exe, pero ahora con eso va el .exe solo, ya que la dll esta adentro del proyecto como recurso embebido y se carga a memoria al ejecutarse.

saludos.


En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Adjuntar DLL dentro del Executable?
« Respuesta #2 en: 23 Noviembre 2012, 16:01 pm »

Gracias Seba, he copiado tu solución en mi form, pero no anda, he tenido que eliminar estas líneas en el form load:
Código
  1.        Dim i As New ClassLibrary1.Class1
  2.        Call i.Saludo()
  3.        i = Nothing
(me daba error en la primera, porque no tengo definida "class1")

Pero la dll no se adjunta.


Cita de: seba123neo
obviamente antes hay que agregar la dll como "nuevo elemento existente" y ponerle en las opciones de compilación como "recurso embebido".

Lo primero te refieres a agregar la DLL a "Resources"? Eso ya lo hice
 y las opciones de compilación, ¿Donde encuentro eso?

EDITO: "Propiedades > compile"? que hago ahora allí?

Un saludo!
En línea



seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Adjuntar DLL dentro del Executable?
« Respuesta #3 en: 23 Noviembre 2012, 16:16 pm »

  • 1 - Supongamos que tengo un boton personalizado que es una dll, primero como cualquier control tenes que obviamente agregarlo como referencia asi lo podes usar desde el codigo, eso ya lo debes tener
  • 2 - Luego tenes que agregar el archivo dll al proyecto, click derecho en el arbol del proyecto y seleccionas agregar elemento existente, buscas la dll y la agregas, fijate que te debe aparecer la dll en el arbol de proyectos.
  • 3 - Seleccionas la dll y en las propiedades en "Accion de compilacion" le pones "Recurso Incrustado", luego colocas ese codigo del ultimo post del link que te pase, en un modulo comun (no de clase) y tenes que especificarle que tu proyecto comienze desde el Sub_Main y no desde el Load del formulario.

compilas y probas llevar el .exe a una carpeta vacia, de esa manera si llevas el .exe compilado a una carpeta vacia, cuando ejecutes el .exe va a querer buscar esa dll en el directorio, pero como no lo va a encontrar, se va a ejecutar ese evento del modulo y lo va a cargar desde el recurso.
En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Adjuntar DLL dentro del Executable?
« Respuesta #4 en: 23 Noviembre 2012, 16:29 pm »

1. colocas ese codigo del ultimo post del link que te pase, en un modulo comun (no de clase)
2. y tenes que especificarle que tu proyecto comienze desde el Sub_Main y no desde el Load del formulario.

Hice todo lo que me dijiste, me quedé en ese punto, no se hacerlo  :(

1. lo del módulo común es es el módulo agregado desde "agregar > nuevo módulo"?

2. ¿Me podrías indicar en que form debo cambiar eso? osea...en que línea está eso que tengo que cambiar?

saludos!
En línea



seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Adjuntar DLL dentro del Executable?
« Respuesta #5 en: 23 Noviembre 2012, 16:53 pm »

si, agrega un modulo comun y pone esto tal cual:

Código
  1. Imports System.IO
  2. Imports System.Reflection
  3.  
  4. Module Module1
  5.    Sub Main()
  6.        AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf CargarLibreriaMemoria
  7.  
  8.        Application.EnableVisualStyles()
  9.        Application.Run(Form1) ' aca pone el nombre del formulario de inicio tuyo
  10.    End Sub
  11.  
  12.    Private Function CargarLibreriaMemoria(ByVal sender As Object, ByVal args As ResolveEventArgs) As Assembly
  13.  
  14.        Dim vNombre As String = args.Name.Substring(0, args.Name.IndexOf(","))
  15.  
  16.        Dim vStream As Stream = Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication1." & vNombre & ".dll")
  17.        Dim vBuffer As Byte() = New Byte(vStream.Length - 1) {}
  18.  
  19.        vStream.Read(vBuffer, 0, vBuffer.Length)
  20.  
  21.        Dim vLibreria As Assembly = Assembly.Load(vBuffer)
  22.  
  23.        Return vLibreria
  24.    End Function
  25. End Module

luego vas a las propiedades del proyecto (menu proyecto-propiedades del proyecto xxxxxx), le deshabilitas el check que dice "Habilitar marco de trabajo de la aplicacion" y de esa forma en el combo que dice "Formulario de inicio" te va a aparecer la opcion Sub_Main, la seleccionas y listo.
En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Adjuntar DLL dentro del Executable?
« Respuesta #6 en: 23 Noviembre 2012, 17:01 pm »

Pues he seguido tus pasos , pero al intentar compilar me dice:
Error   1   'Sub Main' is declared more than once in 'PlayLists': PlayLists.Module2.Main(), PlayLists.Module1.Main()   WindowsApplication19
En línea



seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Adjuntar DLL dentro del Executable?
« Respuesta #7 en: 23 Noviembre 2012, 17:10 pm »

ahi te dice que debes tener otro sub main en otro modulo, debes tener solo 1.
En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Adjuntar DLL dentro del Executable?
« Respuesta #8 en: 23 Noviembre 2012, 17:18 pm »

ok gracias, eso lo sabía, lo que no sabía era que hacer con el otro sub_main xD, he borrado el otro módulo, no tenía mucha importancia.

Ahora ya he completado tus pasos, pero mi app sigue necesitando la dll!


me dijiste que copiase esto tál cual:

Código
  1.  Dim vStream As Stream = Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication1." & vNombre & ".dll")
  2.  
¿Seguro que no debo poner el nombre de mi recurso ahí?


EDITO:





« Última modificación: 23 Noviembre 2012, 17:30 pm por EleKtro H@cker » En línea



seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Adjuntar DLL dentro del Executable?
« Respuesta #9 en: 23 Noviembre 2012, 18:10 pm »

Me olvide decir que tenes que cambiar en el codigo donde dice windowsapplication1 por el nombre de tu proyecto.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] Como adjuntar archivos a un mail en PHP ??
PHP
Diabliyo 7 27,051 Último mensaje 27 Noviembre 2008, 00:32 am
por дٳŦ٭
[DUDA xD]IF Dentro De Un FOR?[SOLUCIONADO!] « 1 2 »
Scripting
FranciskoAsdf 13 11,416 Último mensaje 12 Octubre 2009, 15:17 pm
por FranciskoAsdf
[SOLUCIONADO]Extraer archivos dentro de un .jar
Java
cyberserver 6 13,122 Último mensaje 31 Diciembre 2009, 14:13 pm
por Debci
[SOLUCIONADO]reproducir canciones dentro de un jar
Java
danielo- 7 10,005 Último mensaje 14 Marzo 2010, 01:28 am
por 1mpuls0
(SOLUCIONADO) Busqueda dentro de un vector en C
Programación C/C++
;c1v!c 3 10,915 Último mensaje 23 Febrero 2011, 22:27 pm
por ;c1v!c
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines