PDA

Ver la Versión Completa : Elegir la carpeta para BPL's ¿?


elcolo83
01-10-2008, 16:55:04
Hola a todos!!! Abro este hilo para ver si alguien me puede ayudar con este problema:
Estoy haciendo una aplicacion que con plugins, con lo cual, en la maquina que instale la aplicacion debo copiar las BPL's de delphi que usa el proyecto. lo que quiero hacer es setear de alguna manera el directorio de busqueda de esas BPL (como ser vcl.bpl, etc) sin tener que copiarlo en "Windows\System" ni en la carpeta raiz del ejecutable, sino que quiero tenerlas en una carpeta exlusibamente para estos archivos aparte... alguien sabe como hacerlo???

ContraVeneno
01-10-2008, 19:03:11
¿establecer el "Search Path" de tu proyecto no sirve?

elcolo83
01-10-2008, 19:07:10
Hola ContraVeneno, gracias por contestar.... ya he probado esa opcion (entre otras tantas) y no funciona... yo creo que tiene que haber una forma de poner las bpl's en una carpeta que no sea la del exe ni ninguna del sistema... ya se me terminaron las ideas... escucho sugerencias

maeyanes
01-10-2008, 19:19:00
Hola...

Agrega la ruta donde van a estar esos BPL's en la variable de sistema PATH:


PATH = %PATH%;C:\MyBPL's



Saludos...

elcolo83
01-10-2008, 19:40:09
Ok, y en que parte del form hay que declararlo para que funcione???

maeyanes
01-10-2008, 19:58:24
Hola...

Primero que nada, debes especificar bien que quieres hacer... vas a cargar los bpl's dinámicamente o quieres que la aplicación los cargue normalmente?

Por que si es lo primero, bastaría con que guardes la ruta de donde estarán los bpl's en algún archivo de configuración o el registro y cuando vayas a cargar un bpl, usas esa ruta para buscarlo.

Si quieres que sea normalmente, las bpl's tienen que estár en una carpeta que se encuentre dentro del PATH de Windows. PATH es una variable de ambiente global para Windows.

Para modificar esta variable desde Delphi puedes usar esta función:


// Forma de uso:
SetSystemEnvironmentVariable ('PATH', 'c:\windows;c:\programs\myapp');

procedure SetSystemEnvironmentVariable (const name, value : string);
var
rv : DWORD;

begin
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKey ('SYSTEM\CurrentControlSet\Control\SessionManager\Environment', False);
WriteExpandString (name, value);
SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, 0,
LParam (PChar ('Environment')),
SMTO_ABORTIFHUNG, 5000, rv);
finally
Free
end
end;


Solo te advierto que esta función cambia todo el valor de la variable por uno nuevo y que esto puede ser desastroso para Windows.

También te comento que no es recomendable cambiar este valor dentro de tu aplicación. Esto mayormente se hace desde el proceso de instalación de las aplicaciones, ya que es una variable que no deberías modificar cada que tu aplicación inicie...



Saludos...

elcolo83
02-10-2008, 15:10:10
Como para ir cerrando este hilo entonces creo que lo adecuando entonces es poner todo junto (ya que no queda otra) porque tocar esa clave no siempre es fiable porque por lo que probe si el PATH es una cadena muy larga el CMD de windows no ejecuta algunos comandos... Otra de las opciones que intente y anda bien es crear un icono y poner la carpeta de trabajo donde estan las bpl's y ahi si anda...
Creo que eso es todo...
Muchas gracias maeyanes y ContraVeneno por su ayuda

mcs
01-06-2010, 08:53:21
Hola,

En Delphi 2010 tambien ocurre esto que los BPL sólo se buscan en la carpeta del ejecutable y los directorios que estan en el PATH, o hay alguna forma de indicar donde están los BPL?

Saludos,

Marc

Neftali [Germán.Estévez]
01-06-2010, 10:40:58
Una pregunta. Estos Plugins están cargados linkados estáticamente al EXE. O dicho en otras palabras, ¿Lo cargas utilizando LoadPackages o simplemente has compilado con packages?

Si es lo segundo, como entiendo, debes tenerlos, como han dicho:
* Directorio del EXE
* Directorios del Path

Si fuera el primer caso podrías cargarlos desde donde quisieras.

mcs
01-06-2010, 10:51:02
Una pregunta. Estos Plugins están cargados linkados estáticamente al EXE. O dicho en otras palabras, ¿Lo cargas utilizando LoadPackages o simplemente has compilado con packages?

Si es lo segundo, como entiendo, debes tenerlos, como han dicho:
* Directorio del EXE
* Directorios del Path

Si fuera el primer caso podrías cargarlos desde donde quisieras.

Hola,

Lo que yo uso son directamente los packages del Delphi, nada de carga dinámica. Solo era para no tener tantos ficheros en la carpeta de instalación, pero da igual, lo copiaré todo allí y ningún problema.