程序启动时,是否可以检查在客户端计算机上安装了什么版本的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个字节)星期五,92002,11:30 PM
我使用的更新程序忽略了它们是相同的(版本号没有变化),但是当我手动删除和复制文件时,所有的东西似乎都正常工作。
发布于 2008-09-19 19:21:04
很遗憾,我不会。如果崩溃是由于缺少从应用程序所需的.bpl文件的导入造成的,则无法(除了重写Delphi和链接器本身之外)从崩溃的可执行文件本身中检查这些包。PatrickvL的解决方案可能对您的情况最好。
Neftalí的解决方案可能是一种选择--当然,代价是打包RTL,复制大量文件,并且首先失去拥有包的意义之一。然而,如果您使用的是私有DLL(即,如果您在私有二进制目录中复制DLL),那么您还应该创建一个空文件,其名称与可执行文件的名称相同,但在其上附加扩展名.local,即对于notepad.exe,您将创建一个陈钟泰关于DLL重定向的文章以获取更多详细信息。
发布于 2008-09-19 06:45:17
如果程序崩溃,可能是因为它无法加载动态链接的库。(正如您所说,当系统在搜索路径中的任何地方找不到所需libaries的副本时,就会发生这种情况)。
问题是,这发生在应用程序的启动时,Windows通过一个名为MapAndLoad的API (也可以读取这)来执行。这个API是在应用程序启动之前就被调用的,所以我看不出有什么办法拦截它。
我可以给出的一个建议是使用一个启动程序(它必须静态链接,以防止出现/no/库时出现的问题)。这个启动程序可以检查您的实际应用程序,查看它需要什么导入,检查您的环境,并向用户显示一个很好的故障/故障排除建议对话框。
发布于 2008-09-19 08:37:41
当程序启动时,是否可以检查在客户端计算机上安装了什么版本的BPL (即Rtl70.BPL,Indy70.bpl等)?我有一些程序崩溃,因为那里的计算机上的BPL不同于在构建机器上的程序。如果我必须在每次更新时将使用的每个BPL添加到安装程序中,我认为它将击败>使用它们的要点之一。
您必须安装BPL的副本(RTL70.bpl,INDY.BPL,.)进入安装应用程序的同一目录中。您的应用程序首先搜索位于同一目录下的BPL,然后搜索路径中的目录。缺点是您的系统可以有几个相同的BPL的副本,积极的一点是您将不会遇到相同文件的不同版本的问题。
致以问候。
对不起,我的英语很差。
https://stackoverflow.com/questions/99057
复制相似问题