【问题标题】:Install Delphi Package get error for missing rtl170.bpl安装 Delphi 包因缺少 rtl170.bpl 而出现错误
【发布时间】:2015-09-10 21:22:52
【问题描述】:

目前我将一个项目从 Delphi XE 移动到 XE8。 我们使用一个组件,但最新版本是针对 XE3 的,所以我获取代码并对其进行更改,直到它编译为止。 现在我想安装设计时包,但是我得到了缺少 rtl170.bpl 的错误。 没有人提到 rtl170 只提到 rtl 库。 我读了一些关于运行时包的东西,但是在这个项目中,我在项目选项的包下没有这个菜单项。有什么建议吗? 这台电脑之前安装了Delphi XE,但我在安装XE8之前卸载了它。

【问题讨论】:

  • rtl170 是 rtl 的 XE3 版本。显然,您在某处指的是那个。来个简单的 MCVE 怎么样?
  • 我尝试查看整个项目(它是我们获取源代码的第三方),但我找不到像 rtl170 这样的东西
  • 那么做一些调试吧。去掉东西,直到错误消失。那么您取出的最后一件事应该会导致您遇到问题。
  • 您是否使用供应商的 .dproj 文件来制作软件包?
  • 对 bpl 的引用通常存储在 DCP 文件中。 DPK 中的 requires 子句始终引用 DCP。也许您的设计时包需要一个仍然引用错误 DCP 的运行时包?如果没有更多关于包和您的更改(或未更改)的知识,我们只能猜测。

标签: delphi delphi-xe8 bpl


【解决方案1】:

适用于 XE3,所以我获取代码并更改它直到它编译

组件通常由两个 BPL 文件、一个运行时包和一个设计时包(使用运行时包)组成。组件库(如 Raize、JediVCL、DevExpress 等)由数十个 BPL 对组成。

使用一些工具检查 DLL 依赖项(例如:CFF Explorer 或 Microsoft Dependency Walker 或 WLX FileInfo )并检查您的组件 BPL - 您必须确定组件的 BPL 中哪一个需要 rtl170.bpl DLL

使用 SysInternals Process Monitor 之类的记录 BPL 加载或仅扫描所有磁盘以查找这些 BPL 名称可能是一个有用的想法。您可能有类似的情况:

  1. 您尝试安装的新建设计时 BPL(没有指向 rtl170 的链接)
  2. 新建的运行时 BPL(也没有到 rtl170 的链接)
  3. 较旧的运行时 BPL,由 XE3 构建并引用 rtl170。如果存在,则 (1) BPL 可能会找到并加载 (3) 而不是 (2),因此无论您要重新编译多少 (2),它都不会产生任何影响。

这只是一个可能的混淆场景,但它肯定会发生。 确保没有 xe3 制造的 BPL 的旧残骸。

有时只是查找和删除杂散的旧 BPL 修复问题(例如 - 修复 XE2 的 upd4 :-D)。

对于其余部分,我们认为您没有发现旧的流氓 BPL,并且您发现新的 XE8 编译的 BPL 仍然引用 rtl170。

然后,如果您有组件的完整源 - 删除(或暂时移走)其所有 DCP/DCU 文件并强制从所有包的源编译可能会有所帮助。同样,您可以使用 SysInternals Process Monitor 等工具对 Delphi 编译包的文件访问日志进行快照。有时它表明由于不同的原因,您的德里忽略了 DPK/PAS 源文件,而是使用旧的 DCU/DCP 进行编译。

说实话,XE8 与 XE3 的 DCU/DCP 兼容的可能性很低,但这仍然是研究您的情况的途径之一。

现在我们假设您的组件中没有任何 dcu/dcp/bpl 文件明确位于 Delphi 可访问的 HDD 上。假设您使用了编译组件的唯一方法 - 100% 从源代码中完成。

阅读:http://docwiki.embarcadero.com/RADStudio/en/Compiler_directives_for_libraries_or_shared_objects_%28Delphi%29

很有可能——这些设置要么在错误包的 .DPK 文件(或任何其他 Pascal 源)中,要么在错误包的 .DPROJ 文件中(然后可以在 IDE 项目选项对话框中或通过任何 XML 访问它们编辑)。或者有时在 DPROJ 和 PAS/DPK 文件中。

您将找到这些设置并将它们从 m170 修复为 xe8 BPL 的实际后缀

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,花了我一段时间才找到解决方案。我当前的 Delphi 版本是 XE6,但是当我尝试安装特定的 BPL 时,它一直想使用 rtl170。 BPL 编译正常,但无法安装。机器上曾经有XE3的副本,但我已经卸载了。

    原来我在 C:\Windows\sysWOw64 中有相同运行时 BPL 的旧副本。一旦我删除了 sysWOw64 中的副本,XE6 就不再抱怨了。

    【讨论】:

      猜你喜欢
      • 2015-03-22
      • 2015-10-19
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多