创建安装程序时如何确保从设计时包中正确“需要”定义 Delphi 运行时包

Posted

技术标签:

【中文标题】创建安装程序时如何确保从设计时包中正确“需要”定义 Delphi 运行时包【英文标题】:How to ensure correct 'requires' definition of a Delphi run-time package from within a design-time package when creating an installer 【发布时间】:2011-10-17 07:47:14 【问题描述】:

我正在为目前没有的组件创建一个安装程序(例如优秀的SynEdit 编辑器库),这也让我能够比我更好地理解设计和运行时包。

我想确保最干净的部署,所以我知道许多单元将进入运行时包,并且及时我可能会使用“使用运行时包构建”进行部署,所以这一切都很好。但是,设计时包通常需要运行时包,这就是我遇到麻烦的地方。通常我会创建一个项目组,其中包含运行时包项目 (xxx-RXE),然后是设计时包项目 (xxx-DXE)。全部构建,一切都很好。我在我自己的库路径和install the design-time package into the IDE using the registry 中以 BPL、DCP 和 DCU 形式部署这两个包。然后将库路径添加到环境设置中。当我打开 Delphi(D7 和 XE 都是如此)时,我得到“无法加载包 XXXX-DXE,找不到库包 xxx-RXE.bpl。如果我通过修改设计时包以从“requires”中删除 xxx-RXE.dcp 并直接用单位替换它来作弊,一切都很好。

我试图避免在 Delphi 文件夹中插入任何内容,所以我的项目结构是这样的(仅显示 XE,D7 类似)。将包设置为输出单元,bpl 和 dcp 为“..\Library\Delphi15”,所有包都被赋予“..\Source”的搜索路径,设计时包的附加搜索路径为“..\Library” \Delphi15"(查找所需的运行时包)。

\Root
  \Packages
    xxx.groupproj
    xxx-RXE.dpk
    xxx-DXE.dpk 
  \Library
    \Delphi15
      (output of all dcus, dcp's, bpl's etc. Manually added *.res, *.inc and *.dfm's).     
  \Source
    (The original project source files as used by the packages).

Delphi 不使用上述文件夹,在我的安装程序创建以下部署文件夹之前,我不会对 Delphi IDE 执行任何操作:

c:\Program Files\xxx\Library\Delphi15

(包含所有BPL、DCP、DCU等,也是放入环境库路径的路径)。

所以我不清楚的是,如果所有文件都在该文件夹中并带有路径,为什么 delphi 看不到它们?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

“找不到库包 xxx-RXE.bpl”可能会产生误导。我相信这实际上意味着 LoadPackage 失败,出于某种原因。这可能是由 Windows 路径中不存在的依赖包引起的。

【讨论】:

【参考方案2】:

刚刚阅读“无法加载包 XXXX-DXE,未找到库包 xxx-RXE.bpl”引发了不好的回忆。通常,当包含 DCP(和/或 BPL?)的路径不包含在 Windows 环境变量 PATH 中时,我会收到此错误。

当一个已安装的包引用另一个包时,这个引用包的正常“Windows 库搜索行为”会启动(在 Delphi 启动时)。 此时没有任何 Delphi 路径配置处于活动状态。因此,您的安装程序还需要修改 PATH 环境变量(或将文件复制到某个已包含的位置)。

【讨论】:

【参考方案3】:

我很确定 DCP 必须在 Delphi 的 DCP 文件夹中。在我的装有 Delphi 2010 和 Windows 7 的机器上,它位于 C:\Users\Public\Documents\Rad Studio\7.0\Dcp

搜索注册表,在HKCU\Software\Codegear\BDS\7.0\Library 的值Package DCP Output 下找到此路径。当然,你必须扩展字符串,因为它在里面是$(BDSCOMMONDIR)\Dcp

我还将运行时 BPL 也放在 Delphi 默认位置,(对我而言)也是 C:\Users\Public\Documents\Rad Studio\7.0\Dcp

【讨论】:

以上是关于创建安装程序时如何确保从设计时包中正确“需要”定义 Delphi 运行时包的主要内容,如果未能解决你的问题,请参考以下文章

设计时包无法构建 - 找不到文件:“Graphics.dcu”

Delphi XE5,如何将包中定义的框架放入组件调色板

如何对 Delphi/C++Builder 中的设计时包进行故障排除?

如何从用户定义的包中正确导入宏?

调用包中的过程或函数

将应用程序上传到 google play 时包名称不匹配