关于delphi:在程序启动时获取BPL版本

关于delphi:在程序启动时获取BPL版本

Getting BPL Versions at program startup

程序启动时,是否可以检查客户端计算机上安装了哪个版本的BPL(即Rtl70.BPL,Indy70.bpl等)?

我有一些程序崩溃,因为该计算机上的BPL与构建计算机上的BPL不同。
如果我必须在每次更新时将用于安装的每个BPL添加到安装程序中,我认为它会破坏使用它们的要点之一。

Delphi 7,如果有所作为

只是跟进我的问题。
rtl70.bpl文件在生成计算机和客户端之间仅稍有不同。

Clients Computer: 7.0.4.453 760 KB (778,240 bytes) Tuesday, 20 August 2002, 4:40:26 PM
Build computer: 7.0.4.453 760 KB (778,240 bytes) ?Friday, ?9 ?August ?2002, ??11:30:00 PM

我使用的更新程序忽略了它们,因为它们是相同的(内部版本号没有更改),但是当我手动删除并复制文件时,所有事情似乎都可以正常工作。


很不幸的是,不行。如果崩溃是由于您的应用程序所需的.bpl文件缺少导入而导致的,则无法(仅重写Delphi RTL和链接器本身)无法从崩溃的可执行文件本身中检查这些软件包。 PatrickvL的解决方案可能是最适合您的情况的解决方案。

Neftalí的解决方案可能是一个选择-当然,这是以打包RTL,复制大量文件为代价,并且失去了首先拥有软件包的要点之一。但是,如果使用私有DLL(即,如果将DLL复制到私有二进制文件目录中),则还应创建一个与可执行文件同名的空文件,但在文件后附加扩展名.local,例如记事本。 .exe,您将创建一个notepad.exe.local。有关更多详细信息,请参见Raymond Chen的DLL重定向文章。


如果程序崩溃,则可能是因为它无法加载与其动态链接的库。 (正如您所说,当系统无法在搜索路径中的任何位置找到所需的库的副本时,就会发生这种情况)。

问题是,这是在应用程序启动时发生的,Windows操作系统通过称为MapAndLoad的API来执行此操作(也请阅读此内容)。甚至在您的应用程序启动之前就调用了此API,因此我看不到拦截它的方法。

我可以提出的一个建议是使用启动器(必须静态链接,以防止根本没有/ no /库的问题)。
该启动器可以检查您的实际应用程序,查看需要导入什么,检查您的环境并向用户显示一个不错的故障/疑难解答建议对话框。


您不能从使用这些bpl的可执行文件中执行此操作,但是可以有一个小的启动程序来检查bpl,然后调用主可执行文件。


Is it possible to check what version of BPL (ie Rtl70.BPL, Indy70.bpl etc) are installed >on a clients computer when the program starts?
I have had some programs crash because the BPL on there computer is different to the ones >on the build machine.
If i have to add each BPL used into the installer on each update, i think it will defeat >one of the points on using them.

您必须将BPL的副本(RTL70.bpl,INDY.BPL等)安装(开发)到安装应用程序的同一目录中。您的应用程序首先在同一目录中搜索BPL,然后在路径内的目录中搜索。
不利的是,您的系统将可以具有同一BPL的多个副本,有利的是,您不会对同一文件的不同版本产生问题。

问候。

P.D:对不起,我的英语不好。


有时Delphi会自动添加行:
{$ R'* .res'}
到项目或软件包的文件。

注释(//)该行,然后再次编译。


推荐阅读

    检查linux服务器命令?

    检查linux服务器命令?,系统,信息,状态,情况,时间,工具,网络,环境,服务,电脑,

    linux同步客户端命令?

    linux同步客户端命令?,时间,网络,服务,系统,认证,状态,管理,信息,分析,地址,l

    重启计算机命令linux?

    重启计算机命令linux?,系统,工作,命令,服务,标准,设备,灵活,首要,意义,参数,L

    linux计算机的命令?

    linux计算机的命令?,系统,工作,信息,设备,技术,命令,网站,管理,灵活,基础,lin

    linux检查硬盘的命令?

    linux检查硬盘的命令?,系统,信息,检测,情况,命令,工具,电脑,地址,设备,硬盘,l

    linux用计算器的命令?

    linux用计算器的命令?,代码,环境,情况,异常,工具,数据,位置,平台,精密,设计,

    linux检查挂载命令?

    linux检查挂载命令?,设备,系统,信息,情况,状态,服务,软件,命令,磁盘,网络,lin

    linux命令测试客户端?

    linux命令测试客户端?,地址,系统,网络,工具,工作,分析,环境,命令,下行,资料,l

    linux的数学计算命令?

    linux的数学计算命令?,工作,系统,信息,地址,数字,目录,命令,百分比,情况,管

    linux一般检查命令?

    linux一般检查命令?,网络,系统,检测,情况,工作,信息,命令,进程,时间,设备,lin

    检查硬件linux命令?

    检查硬件linux命令?,信息,系统,第一,数据,设备,检测,命令,情况,灵活,实时,如

    linux云计算查看命令?

    linux云计算查看命令?,系统,信息,地址,工作,命令,情况,标准,服务,软件,网络,l

    linux打开计算器命令?

    linux打开计算器命令?,密码,电脑,工作,设备,数字,系统,手机,指数,情况,服务,

    linux命令输出计算?

    linux命令输出计算?,标准,地址,工作,信息,系统,命令,软件,数据,文件,控制台,l

    检查路由命令linux?

    检查路由命令linux?,网络,地址,系统,信息,工具,电脑,时间,通信,服务,命令,lin

    linux数据库检查命令?

    linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

    linux分区检查命令是?

    linux分区检查命令是?,系统,设备,工具,管理,情况,信息,检测,分区,密码,单位,

    linux计算总数命令?

    linux计算总数命令?,系统,第一,情况,数据,信息,电脑,命令,百分比,单位,工作,l

    linux中计算器命令?

    linux中计算器命令?,地址,数据,位置,网络,设备,时间,环境,平台,软件,命令,说

    linux退出计算器命令?

    linux退出计算器命令?,工作,地址,系统,命令,通信,信息,电脑,目录,路径,操作,