首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在程序启动时获取BPL版本

在程序启动时获取BPL版本
EN

Stack Overflow用户
提问于 2008-09-19 02:47:47
回答 5查看 2K关注 0票数 2

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

我有一些程序崩溃,因为那里的计算机上的BPL不同于在构建机器上的程序。

如果我必须在每次更新时将使用的每个BPL添加到安装程序中,我认为它将击败使用它们的一个点。

德尔菲7,如果有区别的话

只是跟进一下我的问题。

在构建计算机和客户端之间,rtl70.bpl文件只是略有不同。

客户端计算机:7.0.4.453760 KB (778,240字节),2002年8月20日星期二,下午4:40:26 构建计算机:7.0.4.453760 KB (778,240个字节)‎星期五,‎9‎‎2002,‏‎11:30 PM

我使用的更新程序忽略了它们是相同的(版本号没有变化),但是当我手动删除和复制文件时,所有的东西似乎都正常工作。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-19 19:21:04

很遗憾,我不会。如果崩溃是由于缺少从应用程序所需的.bpl文件的导入造成的,则无法(除了重写Delphi和链接器本身之外)从崩溃的可执行文件本身中检查这些包。PatrickvL的解决方案可能对您的情况最好。

Neftalí的解决方案可能是一种选择--当然,代价是打包RTL,复制大量文件,并且首先失去拥有包的意义之一。然而,如果您使用的是私有DLL(即,如果您在私有二进制目录中复制DLL),那么您还应该创建一个空文件,其名称与可执行文件的名称相同,但在其上附加扩展名.local,即对于notepad.exe,您将创建一个陈钟泰关于DLL重定向的文章以获取更多详细信息。

票数 2
EN

Stack Overflow用户

发布于 2008-09-19 06:45:17

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

问题是,这发生在应用程序的启动时,Windows通过一个名为MapAndLoad的API (也可以读取)来执行。这个API是在应用程序启动之前就被调用的,所以我看不出有什么办法拦截它。

我可以给出的一个建议是使用一个启动程序(它必须静态链接,以防止出现/no/库时出现的问题)。这个启动程序可以检查您的实际应用程序,查看它需要什么导入,检查您的环境,并向用户显示一个很好的故障/故障排除建议对话框。

票数 2
EN

Stack Overflow用户

发布于 2008-09-19 08:37:41

当程序启动时,是否可以检查在客户端计算机上安装了什么版本的BPL (即Rtl70.BPL,Indy70.bpl等)?我有一些程序崩溃,因为那里的计算机上的BPL不同于在构建机器上的程序。如果我必须在每次更新时将使用的每个BPL添加到安装程序中,我认为它将击败>使用它们的要点之一。

您必须安装BPL的副本(RTL70.bpl,INDY.BPL,.)进入安装应用程序的同一目录中。您的应用程序首先搜索位于同一目录下的BPL,然后搜索路径中的目录。缺点是您的系统可以有几个相同的BPL的副本,积极的一点是您将不会遇到相同文件的不同版本的问题。

致以问候。

对不起,我的英语很差。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/99057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档