Domanda

È possibile verificare quale versione di BPL (ad esempio Rtl70.BPL, Indy70.bpl ecc.) è installata su un computer client all'avvio del programma?

Alcuni programmi si sono bloccati perché il BPL sul computer è diverso da quello sulla macchina di costruzione.
Se devo aggiungere ogni BPL utilizzato nel programma di installazione ad ogni aggiornamento, penso che ciò vanificherebbe uno dei punti relativi al loro utilizzo.

Delphi 7, se fa la differenza


Solo un follow-up sul problema che ho avuto.
Il file rtl70.bpl era solo leggermente diverso tra il computer di creazione e i client.

Computer dei clienti:7.0.4.453 760 KB (778.240 byte) martedì 20 agosto 2002, 16:40:26
Costruisci il computer:7.0.4.453 760 KB (778.240 byte) ‎Venerdì ‎9 ‎Agosto ‎2002, ‎‎23:30:00

L'aggiornamento che stavo utilizzando li ignorava perché erano uguali (nessun cambiamento nel numero di build), ma quando eliminavo e copiavo manualmente i file tutto sembrava funzionare.

È stato utile?

Soluzione

Sfortunatamente no.Se l'arresto anomalo è dovuto alla mancanza di importazioni dai file .bpl richiesti dall'applicazione, non c'è modo (a parte riscrivere Delphi RTL e il linker stesso) per verificare la presenza di tali pacchetti dall'interno dell'eseguibile stesso che si è bloccato.La soluzione di PatrickvL è probabilmente la migliore per la tua situazione.

La soluzione di Neftalí potrebbe essere un'opzione, ovviamente al costo di confezionare RTL, duplicare molti file e perdere uno dei punti di forza dell'avere pacchetti.Tuttavia, se stai utilizzando DLL private (ovvero, se copi le DLL nella directory dei binari privati), dovresti anche creare un file vuoto con lo stesso nome dell'eseguibile ma aggiungendo l'estensione .Locale ad esso, cioèper notepad.exe creeresti un notepad.exe.local.Vedere Articolo di Raymond Chen sul reindirizzamento DLL per ulteriori dettagli.

Altri suggerimenti

Se il tuo programma va in crash, probabilmente è perché non riesce a caricare la libreria a cui è collegato dinamicamente.(Come stavi dicendo, ciò accade quando il sistema non riesce a trovare una copia delle librerie necessarie in qualsiasi punto del percorso di ricerca).

Il problema è che ciò avviene all'avvio di un'applicazione, cosa che il sistema operativo Windows fa tramite un'API chiamata MapAndLoad (leggi anche Questo).Questa API viene chiamata prima ancora che l'applicazione venga avviata, quindi non vedo alcun modo per intercettarla.

Un suggerimento che potrei dare sarebbe quello di utilizzare un launcher (che deve essere collegato staticamente, per evitare problemi quando non ci sono /no/ librerie).Questo launcher può ispezionare la tua applicazione effettiva, vedere di quali importazioni ha bisogno, controllare il tuo ambiente e visualizzare all'utente una bella finestra di dialogo con suggerimenti per errori/risoluzione dei problemi.

È possibile verificare quale versione di BPL (ad esempio Rtl70.BPL, Indy70.bpl ecc.) è installata su un computer client all'avvio del programma?Alcuni programmi si sono bloccati perché il BPL sul computer è diverso da quello sulla macchina di costruzione.Se dovessi aggiungere ogni BPL utilizzato nel programma di installazione ad ogni aggiornamento, penso che ciò annullerebbe > uno dei punti relativi al loro utilizzo.

È necessario installare la copia (sviluppo) di BPL (RTL70.bpl, INDY.BPL,...) nella stessa directory in cui si installa l'applicazione.L'applicazione cerca prima i BPL nella stessa directory e poi nelle directory all'interno del percorso.Il punto negativo è che il tuo sistema potrà avere più copie dello stesso BPL, il punto positivo è che non avrai problemi con versioni diverse dello stesso file.

Saluti.

PD:Scusate il mio pessimo inglese.

Non puoi farlo da un eseguibile che utilizza questi bpls, ma potresti avere un piccolo programma di avvio che controlla i bpls e quindi chiama l'eseguibile principale.

A volte Delphi aggiunge un modulo automatico alla riga:
{$R ' *.res'}
ai file di progetto o pacchetti.

Commenta (//) quella riga e ricompila.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top