程序启动时是否可以检查客户端计算机上安装的 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、复制大量文件,并失去最初拥有软件包的一个要点。但是,如果您使用私有(private) DLL(即,如果您将 DLL 复制到私有(private)二进制文件目录中),那么您还应该创建一个与可执行文件同名的空文件,但附加扩展名 .local 到它,即对于 notepad.exe,您将创建一个 notepad.exe.local。请参阅Raymond Chen's article on DLL redirection了解更多详情。
关于delphi - 在程序启动时获取 BPL 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/99057/