Question

Est-il possible de vérifier quelle version de BPL (Rtl70.BPL, Indy70.bpl, etc.) est installée sur un ordinateur client au démarrage du programme?

Certains programmes sont tombés en panne, car le BPL de cet ordinateur est différent de celui de la machine de compilation.
Si je dois ajouter chaque fichier BPL utilisé dans le programme d’installation à chaque mise à jour, je pense qu’il annulera l’un des avantages de leur utilisation.

Delphi 7, si cela fait une différence


Juste un suivi de la question que j'avais.
Le fichier rtl70.bpl n'était que légèrement différent entre l'ordinateur de génération et les clients.

  

Ordinateur client: 7.0.4.453 760 KB (778.240 octets) Mardi, 20 août 2002, 16:40:26
  Créez un ordinateur: 7.0.4.453 760 KB (778.240 bytes) le vendredi, 9 octobre 2016 et le 8 août 2006, le 8 août 2006, le 9 août 2006, le 9 août 2006, le 9 août 2006, le 9 août 2006, le jeudi 9 août 2006, à 11 h 30. p>

Le programme de mise à jour que j’utilisais les ignorait comme étant identiques (aucun changement de numéro de version), mais lorsque j’ai supprimé et copié manuellement les fichiers, tout semblait fonctionner.

Était-ce utile?

La solution

Malheureusement non. Si le blocage est dû à des importations manquantes dans les fichiers .bpl requis par votre application, il est impossible (à moins de réécrire la RTL et l'éditeur de liens Delphi eux-mêmes) de rechercher ces packages dans l'exécutable bloquant. La solution de PatrickvL est probablement la meilleure pour votre situation.

La solution de Neftalí pourrait être une option - bien sûr, au prix de l’emballage du RTL, de la duplication de nombreux fichiers et de la perte de l’un des avantages d’avoir des paquets. Toutefois, si vous utilisez des DLL privées (c.-à-d. Si vous les copiez dans votre répertoire binaires privé), vous devez également créer un fichier vide portant le même nom que votre fichier exécutable, mais en y ajoutant l'extension .local , c.-à-d. pour notepad.exe , vous créez un notepad.exe.local . Consultez l'article de Raymond Chen sur la redirection des DLL pour plus de détails.

Autres conseils

Si votre programme se bloque, c'est probablement parce qu'il ne peut pas charger la bibliothèque avec laquelle il est lié de manière dynamique. (Comme vous l'avez dit, cela se produit lorsque le système ne peut trouver une copie des bibliothèques nécessaires dans le chemin de recherche).

Le problème est que cela se produit au démarrage d'une application, comme le système d'exploitation Windows le fait via une API appelée MapAndLoad (lisez également ceci . ). Cette API est appelée avant même le démarrage de votre application. Je ne vois donc aucun moyen de l'intercepter.

Une suggestion que je pourrais vous donner serait d’utiliser un lanceur (qui doit être lié statiquement pour éviter les problèmes lorsqu’il y a / pas / de bibliothèques du tout). Ce programme de lancement permet d’examiner votre application réelle, de déterminer les importations nécessaires, de vérifier votre environnement et d’afficher une boîte de dialogue de suggestion de dépannage / dépannage à l’utilisateur.

  

Est-il possible de vérifier quelle version de BPL (Rtl70.BPL, Indy70.bpl, etc.) est installée > sur un ordinateur client au démarrage du programme?   Certains programmes sont tombés en panne, car l'ordinateur BPL de leur ordinateur est différent de celui de la machine de compilation.   Si je dois ajouter chaque fichier BPL utilisé dans le programme d’installation à chaque mise à jour, je pense que cela va vaincre > un des points sur leur utilisation.

Vous devez installer votre copie (développement) de BPL (RTL70.bpl, INDY.BPL, ...) dans le même répertoire que celui où vous avez installé l'application. Votre application recherche d'abord les BPL dans le même répertoire, puis dans les répertoires situés dans le chemin. Le point négatif est que votre système peut avoir plusieurs copies du même fichier BPL, le point positif est que vous n’aurez pas de problèmes avec différentes versions du même fichier.

Cordialement.

P.D: Excuse-moi pour mon mauvais anglais.

Vous ne pouvez pas faire cela depuis un exécutable qui utilise ces bpls, mais vous pourriez avoir un petit programme de démarrage qui vérifie les bpls puis appelle l'exécutable principal.

Parfois, Delphi ajoute de la forme automatique la ligne:
{$ R '* .res'}
aux fichiers de projet ou de packages.

Commentez (//) cette ligne et recompilez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top