题
当程序启动时,是否可以检查客户端计算机上安装的 BPL 版本(即 Rtl70.BPL、Indy70.bpl 等)?
我遇到过一些程序崩溃的情况,因为计算机上的 BPL 与构建机器上的 BPL 不同。
如果我必须在每次更新时将使用的每个 BPL 添加到安装程序中,我认为这将破坏使用它们的要点之一。
Delphi 7,如果有影响的话
只是对我遇到的问题的跟进。
构建计算机和客户端之间的 rtl70.bpl 文件仅略有不同。
客户电脑:7.0.4.453 760 KB(778,240 字节)2002 年 8 月 20 日星期二下午 4:40:26
搭建电脑:7.0.4.453 760 KB(778,240 字节)2002 年 8 月 9 号星期五,11:30:00 PM
我使用的更新程序忽略了它们,因为它们是相同的(内部版本号没有变化),但是当我手动删除并复制文件时,一切似乎都有效。
解决方案
很不幸的是,不行。如果崩溃是由于缺少应用程序所需的 .bpl 文件的导入造成的,则无法(除了重写 Delphi RTL 和链接器本身)从崩溃的可执行文件本身检查这些包。PatrickvL 的解决方案可能最适合您的情况。
Neftalí 的解决方案可能是一种选择 - 当然,代价是打包 RTL、复制大量文件,并失去一开始就拥有软件包的一个要点。但是,如果您使用私有 DLL(即,如果您将 DLL 复制到私有二进制文件目录中),那么您还应该创建一个与可执行文件同名的空文件,但附加扩展名 。当地的 到它,即为了 记事本程序 你会创建一个 记事本.exe本地. 。看 Raymond Chen 关于 DLL 重定向的文章 更多细节。
其他提示
当程序启动时,是否可以检查客户端计算机上安装的 BPL 版本(即 Rtl70.BPL、Indy70.bpl 等)?我遇到过一些程序崩溃的情况,因为计算机上的 BPL 与构建机器上的 BPL 不同。如果我必须在每次更新时将使用的每个 BPL 添加到安装程序中,我认为这将击败 > 使用它们的要点之一。
您必须将 BPL(RTL70.bpl、INDY.BPL...)的副本(开发)安装到安装应用程序的同一目录中。您的应用程序首先搜索同一目录中的 BPL,然后搜索路径内的目录。缺点是您的系统可以拥有同一 BPL 的多个副本,优点是您不会因同一文件的不同版本而出现问题。
问候。
PD:对不起,我的英语不好。
您无法通过使用这些 bpls 的可执行文件来执行此操作,但您可以使用一个小型启动程序来检查 bpls,然后调用主可执行文件。
有时Delphi会自动添加行的形式:
{$R'*.res'}
到项目或包的文件。
注释(//)该行并再次编译。