当前位置: 首页 > 知识库问答 >
问题:

解决Delphi BPL包问题,其中BPLs不会加载但您已经重新编译(Windows VirtualStore文件系统问题)

湛嘉歆
2023-03-14

我的一般问题是,如何排除“由于依赖项而导致BPL无法加载,无论我进行了多少清理和重新编译,依赖项都不会消失”的故障。更新您可能认为您有一个干净的重新编译的系统,但多亏了Windows及其文件系统虚拟化错误特性的逆奇迹,您没有。

当我尝试将我的designtime包(在本例中名为dclfstee.bpl)加载到我的Delphi IDE(它是fast Report4TeeChart包装器组件包)中时,它会抱怨:

The program can't start because tee7100.bpl is missing from your computer. Try reinstalling ...

tee7100.bpl在我所知的系统上的任何DCP或DCU文件中都没有引用。但明明是出了问题,我也找不到问题所在。

所有的Delphi用户都面临着一百个BPLS“不会编译或不会加载”的问题。当被问到该做什么时,最普遍的反应就是清理你的电脑。

然而,我现在花了几个小时清理我的计算机,虽然所有的文件都在编译,但很明显,一定有一些过时的东西隐藏在某个地方,因为我试图加载的结果BPL文件仍然希望加载我几天前从系统中删除的TeeChart BPL版本,以及我能找到的所有跟踪。

我删除的Delphi2007中TeeChart的痕迹包括$(BDS)\lib和$(BDS)\lib\debug文件夹中的所有内容,以及系统上的所有DCP和BPL文件夹。而且每个Teechart单位名为dcu的文件都不见了。

一旦你走到了路的尽头,你下一步要做什么?(html" target="_blank">格式化硬盘驱动器,购买新电脑。)说真的。我认为我是个聪明人,但我有一个1tb的硬盘驱动器,一个运行到80+文件夹的库路径,一个看起来组织得很好的源代码存储库,但显然有些东西隐藏在我找不到的地方。

我有TeeChart Standard2012,有完整的源代码,而且据我所知,我的开发机器不再包含任何来自Delphi附带的“Tee chart Tee7100.bpl”版本的旧TeeChart BPLs或DCP文件。

我已经运行了teechart附带的“recompile.exe”向导,该向导似乎只是运行MSBuild并构建包,然后将{$define x}声明写入tee.inc文件(源代码分发版中有两个文件)。

然而,不知何故,似乎一个包中的隐式导入正在绘制某个尚未重建的陈旧文件,因此该文件试图加载tee7100.bpl。新的bpl名称为tee911.bpl。

而不是问一个非常具体到快速报告的问题,我只是把它作为一个具体的例子提到一个普遍的伤害世界,我在Delphi开发的时候遇到过几十次。

我只是给出快速报告的详细信息,这样您就可以看到,这实际上是Delphi IDE中处理组件源代码或包或包集时有时会遇到的一般问题的一个具体实例。清理您的计算机,使您的代码甚至构建可能是棘手的。

下面是我的Delphi包到包依赖解析问题:

>

  • 找到或跟踪隐式加载一些不再需要的BPL问题的最有效方法是什么,这样我的代码(构建和编译都很好!)将实际加载到Delphi IDE中。运行Recompile所产生的BPL文件似乎正确地链接到正确的DCP文件,并且不存在旧的/过时的DCP或DCU文件。例如,新的DCP文件名为tee911.DCP。

    您能知道什么包实际上是过时的吗?当.bpl链接时,什么是静态读取、链接和导入的吗?(我在想,也许像一个特殊的类似地图的文件的BPL文件?)

       del %HOMEPATH%\AppData\Local\VirtualStore\Windows\SysWow64\*.bpl
    
  • 共有1个答案

    益楷
    2023-03-14

    好吧,没有人回答,所以我把这个放在这里,对未来的人有帮助:

    --在清理带有旧版本DLL(包括TeeChart、FastReport、Indy等)的损坏系统时,请记住Windows VirtualStore,这些系统往往会陷入混乱,因为它们既可以作为“随Delphi附带的开箱包”存在,也可以经常作为升级版本安装,如果您直接从供应商处购买并安装它们,或者第三,您可能在公司的Mega-Component-Pack-Directory中有自己的编译副本。

    --当搜索重复或过期的BPL,在windows中进行文件搜索不会在virtualstore中查找,您必须手动为进程、用户或程序定位并清除整个virtualstore区域。

    本期的第二个层面是这样的:

    FastReports的依赖关系图很复杂:

    >

  • 这取决于Indy,您可能有自己的Indy版本,Delphi自己也有一个版本,而硬盘上的其他东西也可能有自己的Indy副本。

    避免所有这些废话的一个非常神奇的技术是,在最初的Delphi IDE安装过程中不安装Indy、FastReport或TeeChart(取消选中或跳过它们),然后自己从源代码处逐个安装它们。仅仅因为在Delphi中预装了一个版本并不意味着这是一件好事。(更新:您不能再在安装过程中取消选择Indy,它是基础Delphi产品的一部分,因为至少是Delphi XE8。任何构建自己库的人都需要一个清除实用程序来从Delphi自己库dirs中删除内置Indy。)

    另一个非常神奇的技术是在虚拟机上运行商业组件的安装程序,然后收集pascal源代码并将其转移到您的clean开发机上,然后自己构建它。这样,您就可以避免在系统中散布BPLs和其他东西,甚至安装到C:\Windows\system32(在32位系统上)和C:\Windows\syswow64(在64位系统上的等效路径)时发生的可怕事情。

  •  类似资料:
    • 问题解决了在这种环境下

    • 本文向大家介绍解决vue 单文件组件中样式加载问题,包括了解决vue 单文件组件中样式加载问题的使用技巧和注意事项,需要的朋友参考一下 在写单文件组件时,一般都是把标签、脚本、样式写到一起,这样写个人感觉有点不够简洁,所以就想着把样式分离出去。 采用import加载样式 在局部作用域(scoped)采用@import加载进来的样式文件,想法是美好的。以为这样加载进来的样式文件也只对当前组件有效;可

    • 问题内容: “ java.lang.Error:未解决的编译问题”的可能原因是什么? 附加信息: 从现有JAR顶部的版本复制一组更新的JAR文件并重新启动应用程序后,我已经看到了这一点。JAR是使用Maven构建过程构建的。 如果接口更改,我希望看到LinkageErrors或ClassNotFound错误。上面的错误提示存在一些较低级别的问题。 彻底的重建和重新部署解决了该问题。此错误是否表明J

    • 我正在尝试加密服务器上发送的语音文件。我使用以下过程: 将语音记录到文件>将文件转换为字节数组>用生成的密钥加密字节数组>将密钥保存到字符串>上载字节数组>从服务器加载文件>将其转换为字节数组>用生成的密钥解密<--这里,我得到一个错误

    • 本文向大家介绍简单解决Python文件中文编码问题,包括了简单解决Python文件中文编码问题的使用技巧和注意事项,需要的朋友参考一下 读写中文 需要读取utf-8编码的中文文件,先利用sublime text软件将它改成无DOM的编码,然后用以下代码: 这样就可以正确地读出文件里面的中文字符了。 同样的,如果要在创建的文件中写入中文,最好也和上面差不多: 创建中文文件 然后以读出的字符为文件名,

    • 本文向大家介绍浅谈python编译pyc工程--导包问题解决,包括了浅谈python编译pyc工程--导包问题解决的使用技巧和注意事项,需要的朋友参考一下 利用python 编译工程,生产pyc文件 pyc文件好处:是一种二进制机器码,并且隐藏了源文件代码,但是有和py文件一样的功能(可以理解为效果一样) 所以可以将代码隐藏,便于商业价值,保护代码隐私还能和py文件一样可运行 所以在一些情况下,需