delphi - ver - Cómo usar un dll fuera de la ruta del sistema
programa para desencriptar dll (3)
Hice una aplicación que usa los dlls de openssl ( libeay32.dll
y ssleay32.dll
). Es indy usarlos, no llamo directamente a los dlls.
La solución más simple que encontré para evitar un instalador (me limito a delegar un exe y estoy de acuerdo con este enfoque) es:
- pon los dlls como recursos del exe
- en el inicio del programa, los extraigo en la carpeta exe
- el exe los usa
Esto es perfecto, pero me gustaría mejorar el enfoque extrayendo los dlls en una carpeta temporal y no en la carpeta exe (que en muchos casos es el escritorio).
El problema es que no sé cómo forzar a la aplicación a usar los dlls en la carpeta temp, porque ahora el comportamiento es: si los dlls no están en el directorio actual, intente buscar en los directorios definidos en la ruta del sistema.
¿Quién sabe una solución para obligar a Indy a usar los dlls en mi ruta temporal? (como "registrar temporalmente los dlls")
Cargue los archivos DLL usted mismo con LoadLibrary
tan pronto como los haya escrito en la carpeta temporal.
Esto hará que LoadLibrary
de Indy use sus archivos DLL cuando los necesiten:
Si lpFileName no incluye una ruta y hay más de un módulo cargado con el mismo nombre base y extensión, la función devuelve un identificador al módulo que se cargó primero.
Puede usar SetDllDirectory
para manipular el orden de búsqueda de DLL.
Si está utilizando una versión actualizada de Indy 10, la unidad IdSSLOpenSSLHeaders
tiene una función pública IdOpenSSLSetLibPath()
para indicarle a Indy qué carpeta personalizada buscar en los archivos DLL de OpenSSL:
procedure IdOpenSSLSetLibPath(const APath: String);