PDA

Ver la Versión Completa : Generar .bpl con todos sus requerimientos


aromigaret
25-02-2016, 21:44:04
Hola, Tengo un .exe que he instalado en las pc de cada uno de mis clientes. Una de las funciones de este .exe es llamar a 'Pedidos.bpl', el cual realiza todas las tares que necesitan mis clientes. La otra función del .exe (y esto lo realiza antes de llamar a 'Pedidos.bpl') es verificar vía FTP, si existe una nueva versión de 'Pedidos.bpl', si hay, la descarga. Es decir lo que actualiza es 'Pedidos.bpl'.
Originalmente, el .exe y el .bpl, fueron instalados con Installshield, con lo cual se instalaron todos los paquetes necesarios para que funcionara tanto el .exe como 'Pedidos.bpl'. Los cuales fueron hechos con Delphi 7. Hice varias actualizaciones y siempre funcionaron bien, simplemente subiendo el nuevo .bpl, ya que los paquetes necesarios fueron los instalados con Installshield, el .exe hace la descarga y la nueva .bpl se ejecuta correctamente.
Ahora bien, el problema es el siguiente, me mude a Delphi xe5 y he realizado la primer versión del .bpl con este Delphi y los paquetes necesarios para que el nuevo 'Pedidos.bpl' funcionen son distintos, a los que tienen instalados mis clientes, por la nueva versión.
La pregunta es como hago para que 'Pedidos.bpl' incluya todo lo necesario para que funcione, pues cuando lo ejecuto en una pc sin xe5, me dice que falta 'vcl190.bpl' , 'rtl190.bpl', etc, etc.
Desde ya agradezco quien me pueda dar una mano, pues volver a realizar una instalación desde Installshield a todos mis clientes seria un nuevo dolor de cabeza, ya que la mayoría no entiende nada.

bitbow
26-02-2016, 00:05:16
Que paquetes usas fuera de los normales?
En una aplicación normal no necesitas más que el exe, si es con conexión a base de datos vas a necesitar (en el peor de los casos, la dll y/o el motor de la base de datos, o el BDE), en el caso de los reportes dependerá de que motor de reportes uses (cristal report, normal report, quickreport, freereport o laz report, rave report).
Saludos.

aromigaret
26-02-2016, 00:38:34
Hola Bitbow, gracias por responder,
Cuando desarrolle el sistema, mi idea era generar un .exe que solo bajara futuras actualizaciones del programa principal que es 'Pedidos.bpl' y luego pasarle el control a la bpl. En ella utilizo BDE para comunicarme con tablas .dbf.
Ahora quiero migrar todo a ADO, es por ello que quiero lanzar la nueva modificación, es decir el nuevo 'Pedidos.bpl'.
El programa que desarrolle, lo utilizan clientes de mi negocio para enviarme notas de pedidos vía FTP, además de actualizarles los precios en forma automática. Eso es lo que hace la .bpl.
Estuve casi 6 meses instalándoles el sistema con Teamviewer, pues aunque solo tenían que bajarlo de mi pagina y bajar el instalador no sabían como hacerlo, es por ello que quiero hacer que las actualizaciones sea de la manera mas sencilla.
Los paquetes que me piden entre otros son:
Indycore190.bpl
IndyProtocols190.bpl
Indysystem190.bpl
rtl190.bpl
vcl190.bpl
vclx190.bpl
vclZipForged19.bpl
y la lista sigue un poco mas....
Espero haber sido claro. Agradezco tu ayuda.

bitbow
26-02-2016, 01:02:24
Pues de los que listas solo veo que necesitas las dll de ZipForge (creo que zip.dll), y ADO no recuerdo haberlo usado, que pase el siguiente forero a comentar que te puede hacer falta, así que la duda queda en ¿que necesitas para las conexiones ADO en el equipo final?.

Saludos.

aromigaret
26-02-2016, 05:10:05
Lo que necesito bitbow, es saber como compilar las .bpl que necesito junto con la .bpl que genero, como cuando compilas un .exe tildas la opción link with runtime package y todos los componentes que tu .exe necesite se cargan en la compilación, bueno eso mismo pero para una .bpl.

Neftali [Germán.Estévez]
26-02-2016, 09:52:48
La pregunta es como hago para que 'Pedidos.bpl' incluya todo lo necesario para que funcione, pues cuando lo ejecuto en una pc sin xe5, me dice que falta 'vcl190.bpl' , 'rtl190.bpl'

El problema es que packages y ejecutables no son exactamente iguales.
Tengo dudas de que dentro de un package puedas hacer eso que necesitas (de meter todas las dependencias) al igual que haríamos con un EXE.
Es más, diría que no vas a poder hacerlo.

Creo que deberás subir al FTP el package de pedidos y el resto de packages necesarios.

Una solución si no quieres cambiar el EXE sería:

1) Subir un PEDIDOS.BPL compilado con Delphi7, de forma que no necesite más BPL. Y desde este PEDIDOS.BPL descargar los packages que necesitarás para el próximo ( 'vcl190.bpl' , 'rtl190.bpl', etc, etc...)

2) La siguiente versión ya podrá ser un PEDIDOS.BPL compilado con Delphi XE5, porque se supone que ya tendrás descargados los packages necesarios para esa versión.

Otra opción es modificar el EXE, por ejemplo para que descargue un PEDIDOS.ZIP y lo descomprima; De esa forma puedes poner en el ZIP, el PEDIDOS.BPL únicamente, o el PEDIDOS.BPL + vcl190.bpl + rtl190.bpl,...

aromigaret
26-02-2016, 14:22:18
Hola Neftalí, gracias por responder
Lo que mencionas de reemplazar el .exe es la intención que tengo con la nueva .bpl. La idea es que la nueva .bpl instalara un nuevo .exe para que en vez de llamar a una .bpl , llamara a un .exe, el cual me daría mas flexibilidad para los cambios, lo plantee mal desde el principio al optar por la .bpl.
Pero veo que no hay forma de iniciar el cambio con xe5. La opción de instalar en mi pc nuevamente Delphi 7 no me agradaba, pero no hay otra.
Muchas gracias.

aromigaret
26-02-2016, 15:57:48
Neftalí, una pregunta. si el .exe esta compilado con Delphi 7 o xe3 y el .bpl con xe5, son compatibles? es decir funciona? o ambos tienen que ser compilados con la misma versión de Delphi?

Neftali [Germán.Estévez]
27-02-2016, 00:57:25
No lo podrás utilizar linkado de forma estática, pero sí deberías poder cargarlo de forma dinámica (como si lo hicieras con una DLL).

aromigaret
27-02-2016, 19:10:11
Perdón por la ignorancia, dinámica te referís a la siguiente forma de cargarlo?:


procedure tform2.cargar;
var
PackageModule: HModule;
AClass: TPersistentClass;
begin
if fileexists('Pedidos.bpl') then begin
PackageModule := LoadPackage('Pedidos.bpl');
if PackageModule <> 0 then
begin
AClass := GetClass('TForm1');

if AClass <> nil then
with TComponentClass(AClass).Create(Application)
as TCustomForm do
begin
ShowModal;
Free;
end;

UnloadPackage(PackageModule);
end;
end;


Porque si es así, no lo carga. Es decir el .exe original carga perfectamente (con el procedimiento que te muestro) y fueron generados con XE (al igual que el .exe), pero al nuevo 'Pedidos.bpl', generado con xe5 no lo carga.

Neftali [Germán.Estévez]
28-02-2016, 02:07:12
Perdón por la ignorancia, dinámica te referís a la siguiente forma de cargarlo?:


Si, a esa e refería.
¿Si lo ejecutas paso a paso, en qué momento falla?

aromigaret
28-02-2016, 16:00:48
simplemente no lo carga, no da ningún error. Están en el mismo directorio. cuando vuelvo a poner el viejo 'Pedidos.bpl', a este si lo levanta.

Neftali [Germán.Estévez]
29-02-2016, 14:31:54
No digo que deba dar ningún error.
Digo que si ejecutas el código anterior paso a paso, si está fallando algún IF.

aromigaret
29-02-2016, 20:03:46
Neftalí, te comento que el .exe y los sucesivos .bpl que tienen instalados en sus PCs, fueron compilados con Delphi XE. Esos mismos códigos fuentes, los compile con xe5 y funcionan, el problema radica en que el .bpl generado con xe5 lo copio a una pc donde tiene el .exe generado con xe y no lo levanta. Por eso mi conclusión de que al no estar compilados con la misma versión, no lo carga. Por eso voy a optar por buscar entre mis cd la versión xe y reinstalarla. Me parece algo ilógico que no se pueda hacer, es decir .exe compilado con versión x.0 no pueda cargar .bpl compilado con versión x+1.0. Pero el tiempo tiene su costo, así que hare lo mas sencillo, reinstalar versión anterior.
Muchas gracias por tu tiempo.