Pregunta

¿Es posible comprobar qué versión de BPL (es decir, Rtl70.BPL, Indy70.bpl, etc.) está instalada en la computadora de un cliente cuando se inicia el programa?

Algunos programas fallaron porque el BPL en la computadora es diferente al de la máquina de compilación.
Si tengo que agregar cada BPL usado en el instalador en cada actualización, creo que anulará uno de los puntos sobre su uso.

Delphi 7, si marca la diferencia


Solo un seguimiento del problema que tuve.
El archivo rtl70.bpl era sólo ligeramente diferente entre la computadora construida y los clientes.

Computadora del cliente:7.0.4.453 760 KB (778.240 bytes) Martes 20 de agosto de 2002, 16:40:26
Construir computadora:7.0.4.453 760 KB (778.240 bytes) Viernes 9 de agosto de 2002 23:30

El actualizador que estaba usando los ignoró por considerarlos iguales (sin cambios en el número de compilación), pero cuando eliminé y copié manualmente los archivos, todo pareció funcionar.

¿Fue útil?

Solución

Lamentablemente no.Si el fallo se debe a que faltan importaciones de los archivos .bpl requeridos por su aplicación, no hay forma (salvo reescribir el RTL de Delphi y el vinculador) de comprobar esos paquetes desde el propio ejecutable que falla.La solución de PatrickvL es probablemente la mejor para su situación.

La solución de Neftalí podría ser una opción, por supuesto, a costa de empaquetar el RTL, duplicar muchos archivos y perder uno de los puntos de tener paquetes en primer lugar.Sin embargo, si está utilizando archivos DLL privados (es decir, si copia los archivos DLL en su directorio binario privado), también debe crear un archivo vacío con el mismo nombre que su ejecutable pero agregando la extensión. .local a ello, es decirpara bloc de notas.exe crearías un notepad.exe.local.Ver Artículo de Raymond Chen sobre la redirección de DLL para más detalles.

Otros consejos

Si su programa falla, probablemente se deba a que no puede cargar la biblioteca con la que está vinculado dinámicamente.(Como decía, esto sucede cuando el sistema no puede encontrar una copia de las bibliotecas necesarias en ninguna parte de la ruta de búsqueda).

El problema es que esto sucede al iniciar una aplicación, lo que el sistema operativo Windows hace a través de una API llamada Mapa y carga (también lea este).Esta API se llama incluso antes de que se inicie la aplicación, por lo que no veo forma de interceptar esto.

Una sugerencia que podría dar sería utilizar un iniciador (que debe estar vinculado estáticamente para evitar problemas cuando no hay ninguna biblioteca).Este iniciador podría inspeccionar su aplicación real, ver qué importaciones necesita, verificar su entorno y mostrar al usuario un agradable cuadro de diálogo de sugerencias de fallas/solución de problemas.

¿Es posible verificar qué versión de BPL (es decir, Rtl70.BPL, Indy70.bpl, etc.) está instalada en la computadora de un cliente cuando se inicia el programa?Algunos programas fallaron porque el BPL en la computadora es diferente a los de la máquina de compilación.Si tengo que agregar cada BPL usado en el instalador en cada actualización, creo que anulará uno de los puntos sobre su uso.

Debe instalar su copia (desarrollar) de BPL (RTL70.bpl, INDY.BPL,...) en el mismo directorio en el que instala la aplicación.Su aplicación busca primero los BPL en el mismo directorio y luego busca en los directorios dentro de la ruta.El punto negativo es que tu sistema podrá tener varias copias de un mismo BPL, el punto positivo es que no tendrás problemas con diferentes versiones de un mismo archivo.

Saludos.

PD:Disculpa me por mi mal inglés.

No puede hacer eso desde un ejecutable que use estos bpls, pero podría tener un pequeño programa de inicio que verifique los bpls y luego llame al ejecutable principal.

A veces Delphi agrega de forma automática la línea:
{$R ' *.res'}
a los archivos de proyecto o paquetes.

Comenta (//) esa línea y compila nuevamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top